6Sep

Geek School: Lær at bruge Remoting i PowerShell

click fraud protection

En af de bedste funktioner PowerShell tilbud er evnen til fjernstyring af dine servere. Det lader dig endda styre en masse af dem samtidig.

Sørg for at læse de tidligere artikler i serien:

  • Lær hvordan du automatiserer Windows med PowerShell
  • Lær at bruge Cmdlets i PowerShell
  • Lær at bruge objekter i PowerShell
  • Lær formatering, filtrering og sammenligning i PowerShell

Og hold dig indstillet på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 sikrere 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 få teknisk

Kernen i PowerShell Remoting ligger i en enkelt Windows Service, Windows Remote Management eller WinRM-tjeneste, 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 er dette gjort ved hjælp af WS-MAN-protokollen, der er baseret på HTTP), binder forbindelsen til en af ​​disse "lyttere"."Lytterne" har derefter ansvaret for at sende trafikken til applikationen, der er knyttet til den relevante sessionskonfigurationsfil;applikationen( normalt PowerShell, men du kan have andre hosting-applikationer, hvis du vil), kører derefter kommandoen og feeds resultaterne tilbage gennem "lytteren" på tværs af netværket og tilbage til din maskine.

instagram viewer

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:

Aktiver-PSRemoting

Du skal derefter svare ja til alle vejledninger. Når du kører Enable-PSRemoting, foretages nogle få ændringer på din pc:

  • WinRM-tjenesten starter.
  • WinRM-tjenesten skifter fra manuel starttilstand 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 arbejdsnets placering. Alternativt kan du springe over netværkskontrollen med 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 prefix, der betyder, at maskinen kører cmdlets mod.

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 det enkelt:

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-kommando

Den anden måde, du kan bruge PowerShell på en ekstern maskine, er at bruge Invoke-Command. Fordelen ved at bruge Invoke-Command kommer fra, at du kan udføre 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 engivet 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 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 strippet væk fra det.

Bemærk: Der er nogle undtagelser fra denne regel, for eksempel kan de fleste primitive typer som heltal deserialiseres med sine metoder inkluderet. Der er også en proces kaldet Rehydration, hvor nogle metoder kan tilføjes tilbage til deserialiserede objekter. Så vær forsigtig og husk. Get-Member er din ven.

Hjemmearbejde

  • Læs Secrets of PowerShell Remoting ebook af Don Jones.