Geek School Lær at bruge Remoting i PowerShell
En af de bedste funktioner PowerShell tilbud er evnen til fjernstyring af dine servere. Det lader dig endda styre en flok af dem samtidig.
Sørg for at læse de tidligere artikler i serien:
- Lær at automatisere Windows med PowerShell
- Lære at bruge Cmdlets i PowerShell
- Lære at bruge objekter i PowerShell
- Learning Formatering, filtrering og sammenligning i PowerShell
Og hold dig indstillet til resten af serien hele ugen.
Hvad er Remoting?
Bulkstyring af dine servere kan være kedelig, og hvis du har lavet en IIS-konfigurationsændring på 50 webservers før, vil du vide, hvad jeg mener. Dette er de situationer, hvor PowerShell Remoting og sprogets scripting evner kan komme til undsætning. Ved hjælp af HTTP eller den mere sikre HTTPS giver PowerShell Remoting dig mulighed for at sende kommandoer til en ekstern maskine på dit netværk. Maskinen kører derefter kommandoerne og sender output tilbage til dig, som igen vises på skærmen.
Lad os blive teknisk
Kernen i PowerShell Remoting ligger en enkelt Windows-tjeneste, Windows Remote Management eller WinRM-tjenesten, som det er blevet kendt. Ved hjælp af WinRM kan du konfigurere en eller flere sessionskonfigurationer (også kendt som endepunkter), som grundlæggende er filer, der indeholder oplysninger om den oplevelse, du vil give til den person, der forbinder til din eksterne PowerShell-instans. Mere specifikt kan du bruge sessionskonfigurationsfiler til at definere, hvem der kan og hvem der ikke kan oprette forbindelse til forekomsten, hvilke cmdlets og scripts de kan køre, samt hvilken sikkerhedskontekst sessionsen skal køres under. Ved hjælp af WinRM-tjenesten opretter du også "lyttere", som lytter til indgående PowerShell-anmodninger. Disse "lyttere" kan enten være HTTP eller HTTPS og kan være bundet til en enkelt IP-adresse på din maskine. Når du åbner en PowerShell-forbindelse til en anden maskine (teknisk set er dette gjort ved hjælp af WS-MAN-protokollen, der er baseret på HTTP), binder forbindelsen til en af disse "lyttere". "Lytterne" har da ansvaret for at sende trafikken til applikationen i forbindelse med den relevante sessionskonfigurationsfil; applikationen (normalt PowerShell, men du kan have andre hosting-applikationer, hvis du vil) derefter kører kommandoen og feeds resultaterne tilbage gennem "lytteren" over netværket og tilbage på din maskine.
Vis mig hvordan
Det første du skal gøre er at aktivere Remoting på den Maskine, du vil oprette forbindelse til. Dette kan gøres ved at køre følgende:
Enable- PSRemoting
Du skal derefter svare ja til alle vejledninger. Når du kører Aktiver-PSRemoting, foretages nogle få ændringer på din pc:
- WinRM-tjenesten starter.
- WinRM-tjenesten skifter fra Manuel opstartstilstand til Automatisk.
- Det opretter en HTTP-lytter, der er bundet til alle dine netværkskort.
- Det skaber også en indgående firewall-undtagelse for WS-MAN-protokollen.
- Nogle standard sessionskonfigurationer oprettes
Hvis du kører Windows 7, og dit netværkskorts placering er indstillet til Offentlig, kan PowerShell Remoting mislykkes. For at rette op på det skal du blot skifte til hjemme- eller arbejdsnetværkets placering. Alternativt kan du springe over netværkskontrollen ved hjælp af følgende:
Aktiver-PSRemoting -SkipNetworkProfileCheck
Vi anbefaler dog, at du ændrer din netværksplacering.
Der er to måder at oprette forbindelse til en anden maskine ved hjælp af PowerShell. Der er den ene til den ene metode, som ligner meget ved at bruge SSH, og så er der den ene til den mange metode.
Brug af en PowerShell-session
Den første måde at oprette forbindelse til en ekstern maskine ved hjælp af PowerShell bruger noget, der hedder en PowerShell-session. Du kan simpelthen sætte en session, så du kan køre kommandoer på den eksterne maskine på en interaktiv måde, meget det samme du ville på din egen maskine. For at åbne en session skal du blot skrive følgende:
Enter-PSSession -ComputerName "Darlah"
Prompten får et præfiks, som betyder, at maskinen kører mod cmdlets.
Herfra kan du virkelig behandle prompten som om du sad på fjernmaskinen. Hvis du f.eks. Vil se alle filerne på C: \ -drevet, kan du gøre et simpelt:
Get-ChildItem -Path C: \
Hvis du kommer fra en Linux-baggrund, kan du tænke på at bruge denne en til en metode til fjernelse som PowerShell-alternativet til SSH.
Brug af Invoke-Command
Den anden måde, du kan bruge PowerShell på en ekstern maskine, er at bruge Invoke-Command. Fordelen ved at bruge Invoke-Command stammer fra, at du kan udføre den samme kommando på flere maskiner samtidigt. Som du kan forestille dig, er dette særligt nyttigt, når du vil gøre noget som at samle hændelseslogfiler fra dine servere. Invoke-Command følger følgende syntaks:
Invoke-Command -computerName Darlah, localhost -ScriptBlock Get-EventLog Application -Newest 2
Da kommandoen udføres parallelt på tværs af alle maskiner, skal du have en eller anden måde at se, hvilken pc et givet resultat kom fra. Du kan gøre dette ved at kigge på egenskaben PSComputerName.
Når du bruger Invoke-Command, har du ikke længere de objekter, du kan forvente i Pipeline. Du ser, for at PowerShell får informationen fra fjernmaskinen tilbage til din maskine, har de brug for en eller anden måde at repræsentere de objekter, som kommandoen du kørte på fjernmaskinens udgange. Disse dage synes det at den valgte måde at repræsentere en hierarkisk datastruktur på, er at bruge XML, hvilket betyder, at når du udsteder en kommando ved hjælp af Invoke-Command, bliver resultaterne først serialiseret i XML, før de sendes tilbage til din maskine. Når de kommer tilbage til din maskine, er de deserialiseret tilbage i et objekt; den gotcha her er, at når de er deserialiserede, alle metoder, undtagen ToString () metode, at objektet havde er fjernet fra det.
Bemærk: Der er nogle undtagelser fra denne regel, for eksempel kan de fleste primitive typer som heltal deserialiseres med dets metoder. Der er også en proces kaldet Rehydration, hvor nogle metoder kan tilføjes tilbage til deserialiserede objekter. Så vær bare forsigtig og husk. Get-Member er din ven.
Lektier
- Læs Secrets of PowerShell Remoting ebook af Don Jones.