Geek School: Lær å bruke Remoting i PowerShell

Innholdsfortegnelse:

Geek School: Lær å bruke Remoting i PowerShell
Geek School: Lær å bruke Remoting i PowerShell

Video: Geek School: Lær å bruke Remoting i PowerShell

Video: Geek School: Lær å bruke Remoting i PowerShell
Video: How To Get Computer System Information Using PowerShell on Windows 10 - YouTube 2024, April
Anonim
En av de beste funksjonene i PowerShell tilbyr muligheten til å administrere serverne dine eksternt. Det lar deg også styre en haug med dem samtidig.
En av de beste funksjonene i PowerShell tilbyr muligheten til å administrere serverne dine eksternt. Det lar deg også styre en haug med dem samtidig.

Husk å lese de forrige artiklene i serien:

  • Lær hvordan du automatiserer Windows med PowerShell
  • Lære å bruke Cmdlets i PowerShell
  • Lære hvordan du bruker objekter i PowerShell
  • Læreformatering, filtrering og sammenligning i PowerShell

Og hold deg innstilt for resten av serien hele uken.

Hva er Remoting?

Bulkadministrasjon av serverne dine kan være kjedelig, og hvis du må endre en IIS-konfigurasjon på 50 webservere før, vet du hva jeg mener. Det er slike situasjoner når PowerShell Remoting og språkets skriptegenskaper kan komme til redning. Ved hjelp av HTTP eller den sikrere HTTPS-en, kan PowerShell Remoting du sende kommandoer til en ekstern maskin på nettverket ditt. Maskinen kjører deretter kommandoene og sender utgangen tilbake til deg, som igjen vises på skjermen.

La oss få teknisk

Kjernen til PowerShell Remoting ligger en enkelt Windows-tjeneste, Windows Remote Management eller WinRM-tjenesten, slik den er blitt kjent. Ved hjelp av WinRM kan du konfigurere en eller flere sesjonskonfigurasjoner (også kjent som sluttpunkter), som egentlig inneholder filer som inneholder informasjon om opplevelsen du vil gi til personen som kobler til din eksterne PowerShell-forekomst. Mer spesifikt kan du bruke øktkonfigurasjonsfiler til å definere hvem som kan og hvem ikke kan koble til forekomsten, hvilke cmdlets og skript de kan kjøre, samt hvilken sikkerhetsmessig kontekst sesjonen må kjøre under. Ved hjelp av WinRM-tjenesten oppretter du også "lyttere", som lytter etter innkommende PowerShell-forespørsler. Disse "lytterne" kan enten være HTTP eller HTTPS og kan være bundet til en enkelt IP-adresse på maskinen din. Når du åpner en PowerShell-tilkobling til en annen maskin (teknisk sett gjøres dette ved hjelp av WS-MAN-protokollen, som er basert på HTTP), binder forbindelsen til en av disse "lytterne". "Lytterne" har da ansvaret for å sende trafikken til applikasjonen assosiert med den aktuelle øktkonfigurasjonsfilen; programmet (normalt PowerShell, men du kan ha andre vertsprogrammer hvis du vil), kjører deretter kommandoen og feeds resultatene tilbake gjennom "lytteren" over nettverket og tilbake til maskinen.

Vis meg hvordan

Det første du må gjøre er å aktivere Remoting på maskinen du vil koble til. Dette kan gjøres ved å kjøre følgende:

Enable-PSRemoting

Du må da svare ja til alle spørsmålene. Når du kjører Aktiver-PSRemoting, gjøres noen endringer til PCen din:
Du må da svare ja til alle spørsmålene. Når du kjører Aktiver-PSRemoting, gjøres noen endringer til PCen din:
  • WinRM-tjenesten starter opp.
  • WinRM-tjenesten endres fra manuell oppstartsmodus til automatisk.
  • Det oppretter en HTTP-lytter som er bundet til alle nettverkskortene dine.
  • Det skaper også et innkommende brannmur unntak for WS-MAN protokollen.
  • Noen standard sesjonskonfigurasjoner er opprettet

Hvis du kjører Windows 7 og nettverkskortets plassering er satt til Offentlig, vil PowerShell Remoting mislykkes. For å fikse det, må du bare bytte til Hjem eller Arbeidsnettsted. Alternativt kan du hoppe over nettverkskontrollen ved hjelp av følgende:

Enable-PSRemoting –SkipNetworkProfileCheck

Vi anbefaler imidlertid at du endrer nettverksplasseringen din heller.
Vi anbefaler imidlertid at du endrer nettverksplasseringen din heller.

Det er to måter å koble til en annen maskin ved hjelp av PowerShell. Det er den ene til en metoden, som ligner på å bruke SSH, og så er det en til mange metoder.

Bruke en PowerShell-sesjon

Den første måten å koble til en ekstern maskin ved hjelp av PowerShell, bruker noe som kalles en PowerShell-sesjon. Enkelt å sette en økt lar deg kjøre kommandoer på den eksterne maskinen på en interaktiv måte, omtrent det samme du ville på din egen maskin. For å åpne en økt, skriv bare følgende:

Enter-PSSession –ComputerName “Darlah”

Prompten vil få et prefiks som betyr maskinen som du kjører cmdletene mot.
Prompten vil få et prefiks som betyr maskinen som du kjører cmdletene mot.
Herfra kan du virkelig behandle spørringen som om du satt på fjernmaskinen. Hvis du for eksempel vil se alle filene på C: -stasjonen, kan du gjøre det enkelt:
Herfra kan du virkelig behandle spørringen som om du satt på fjernmaskinen. Hvis du for eksempel vil se alle filene på C: -stasjonen, kan du gjøre det enkelt:

Get-ChildItem –Path C:

Hvis du kommer fra en Linux-bakgrunn, kan du tenke på å bruke denne en til en metode for fjernelse som PowerShell-alternativet til SSH.
Hvis du kommer fra en Linux-bakgrunn, kan du tenke på å bruke denne en til en metode for fjernelse som PowerShell-alternativet til SSH.

Bruke Invoke-Command

Den andre måten du kan bruke PowerShell på en ekstern maskin, er å bruke Invoke-Command. Fordelen med å bruke Invoke-Command kommer fra det faktum at du kan utføre samme kommando på flere maskiner samtidig. Som du kan forestille deg, er dette spesielt nyttig når du vil gjøre noe som samler hendelseslogger fra serverne dine. Invoke-Command følger følgende syntaks:

Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Get-EventLog Application -Newest 2}

Siden kommandoen utføres parallelt på tvers av alle maskiner, trenger du en måte å se hvilken PC et gitt resultat kom fra. Du kan gjøre dette ved å se på egenskapen PSComputerName.
Siden kommandoen utføres parallelt på tvers av alle maskiner, trenger du en måte å se hvilken PC et gitt resultat kom fra. Du kan gjøre dette ved å se på egenskapen PSComputerName.
Når du bruker Invoke-kommando, har du ikke lenger de objektene du kan forvente i rørledningen. Du ser, for at PowerShell skal få informasjonen fra den eksterne maskinen tilbake til maskinen, trenger de noen måte å representere objektene som kommandoen du kjørte på fjernmaskinens utganger. I dag ser det ut til at den valgte måten å representere en hierarkisk datastruktur er å bruke XML, noe som betyr at når du utsteder en kommando ved hjelp av Invoke-kommando, blir resultatene først serialisert i XML før de sendes tilbake til maskinen din.Når de kommer tilbake til maskinen, blir de deserialisert tilbake til et objekt; The gotcha her er at når de er deserialiserte, alle metoder, bortsett fra ToString () -metoden, som objektet hadde, ble fjernet fra det.
Når du bruker Invoke-kommando, har du ikke lenger de objektene du kan forvente i rørledningen. Du ser, for at PowerShell skal få informasjonen fra den eksterne maskinen tilbake til maskinen, trenger de noen måte å representere objektene som kommandoen du kjørte på fjernmaskinens utganger. I dag ser det ut til at den valgte måten å representere en hierarkisk datastruktur er å bruke XML, noe som betyr at når du utsteder en kommando ved hjelp av Invoke-kommando, blir resultatene først serialisert i XML før de sendes tilbake til maskinen din.Når de kommer tilbake til maskinen, blir de deserialisert tilbake til et objekt; The gotcha her er at når de er deserialiserte, alle metoder, bortsett fra ToString () -metoden, som objektet hadde, ble fjernet fra det.
Image
Image

Merk: Det er noen unntak fra denne regelen, for eksempel kan de fleste primitive typer som heltall deserialiseres med sine metoder inkludert. Det er også en prosess som heter Rehydrering hvor noen metoder kan legges tilbake til deserialiserte objekter. Så vær forsiktig og husk Get-Member er din venn.

Hjemmelekser

Les hemmelighetene til PowerShell Remoting ebook av Don Jones.

Anbefalt: