Innledning
Den forrige artikkelen i denne serien utforsket Active Directory Domain Services forvaltning med Powershell. Nå vil vi undersøke Remoting funksjonene i Powershell 4.0 og utforske protokoller, tjenester og konfigurasjoner som trengs for Remoting å fungere. Det vil bli demonstrasjoner for å synliggjøre hvordan remoting fungerer ved å få informasjon, skape objekter, endre innstillinger, og tildele brukerrettigheter til en gruppe datamaskiner eksternt.
Windows Powershell Remoting
Windows Powershell Remoting gir en metode for å overføre en kommando til en ekstern datamaskin for lokal gjennomføring. Kommandoene trenger ikke å være tilgjengelig på datamaskinen som stammer forbindelsen; det er nok hvis bare de eksterne datamaskiner er i stand til å utføre kommandoer.
Windows Powershell Remoting er avhengig av web services managements (WS-Man) protokoll. WS-Management er et distribuert ledelse arbeidsgruppe (DMTF) åpen standard som er avhengig av HTTP-protokollen (eller HTTPS). Windows Remote Management (WinRM) tjenesten er Microsofts implementering av WS-Management, er WinRM i hjertet av Windows Powershell Remoting, men denne tjenesten kan også brukes av andre ikke-Powershell applikasjoner.
Som standard WS -Man og Powershell Remoting bruk port 5985 og 5986 for forbindelser over HTTP og HTTPS, henholdsvis. Dette er mye vennligere til brannmurer i forhold til andre arven kommunikasjonsprotokoller som distribueres Component Object Model (DCOM) og Remote Procedure Call (RPC), som bruker en rekke porter og dynamiske porttilordninger.
Remoting er aktivert som standard på Windows Server 2012 og det kreves av konsollen server manager for å kommunisere med andre Windows-servere, og til og med å koble til den lokale datamaskinen hvor konsollen er i gang. På klientoperativsystemer, for eksempel Windows 7 eller Windows 8, er remoting ikke aktivert som standard.
Når den er aktivert, registrerer Remoting minst én lytteren. Hver lytteren godtar innkommende trafikk gjennom enten HTTP eller HTTPS; lytterne kan være bundet til én eller flere IP-adresser. Innkommende trafikk angir mottakeren eller endepunkt. Disse endepunktene er også kjent som session konfigurasjoner.
Når trafikken blir dirigert til et endepunkt, starter WinRM Powershell-motoren, hands off innkommende trafikk, og venter på Powershell til å fullføre sin oppgave. Powershell vil da passere resultatene til WinRM og WinRM håndterer overføring av dataene tilbake til datamaskinen som oppsto kommandoene.
Selv om denne artikkelen konsentrerer seg om remoting funksjon i Windows Powershell, er det verdt å merke seg at det er andre fjerntilkoblings protokoller som også brukes av bestemte Powershell cmdlets. For eksempel, noen cmdlets bruke RPC-protokollen, mens andre er avhengig av eksterne register service. Disse mange kommunikasjonsprotokoller kreve ekstra konfigurasjon på brannmuren for å tillate de Powershell kommandoer som skal utføres over nettverket.
Aktivere Powershell Remoting på en lokal datamaskin
Du må kanskje aktivere remoting på Windows-klienter , eldre Windows Server operativsystemer, eller Windows Server 2012 hvis det er deaktivert. Men husk at Remoting må være aktivert kun på datamaskiner som du vil koble til; ingen konfigurasjon er nødvendig på datamaskinen som du sender kommandoer
For å aktivere Remoting manuelt, kjører Enable-PSremoting cmdlet som vist nedenfor.
Figur 1
Kjøre Aktiver-PSremoting cmdlet gjør følgende endringer i datamaskinen.
Setter WinRM tjenesten skal starte automatisk og starte den på nytt
Registrerer standardendepunktene (Session konfigurasjoner) for bruk av Windows Powershell.
Oppretter en HTTP lytteren på port 5985 for alle lokale IP-adresser.
Oppretter et unntak i Windows-brannmuren for innkommende TCP-trafikk på port 5985.
Hvis en eller flere nettverkskort i en datamaskin er satt til publikum (som et alternativ til å arbeide eller domene), må du bruke –. SkipNetworkProfileCheck parameter for Enable-PSremotingcmdlet å lykkes
Running Get -PSSessionConfiguration eksponerer endepunkter opprettet av Enable-PSremoting.
Figur 2
Aktivering av Powershell Remoting Bruke Group Policy
Hvis du har et stort antall datamaskiner, konfigurere en group policy objekt (GPO) kan være et bedre alternativ for å aktivere remoting enn manuelt kjøre Enable-PSremoting cmdlet i hvert system.
Rekkefølgen er ikke viktig, men følgende tre trinn må fullføres for GPO å renne ned effektivt og aktivere remoting på domenet datamaskiner:
Opprett en Windows brannmur unntak for WinRM-tjenesten på TCP port 5985
La WinRM tjenesten til automatisk lytte etter HTTP-forespørsler
Sett WinRM tjenesten skal starte automatisk
Opprett en Windows brannmur unntak for WinRM-tjenesten på TCP port 5985
For å opprette brannmurunntak, bruker konsernet Policy Management Console, og naviger til Datamaskinkonfigurasjon \\ Administrative maler \\ Nettverk \\ Nettverkstilkoblinger \\ Windows-brannmur \\ Domain Profile
Figur 3
Høyreklikk på Windows-brannmur. Definer innkommende program unntak og velg Rediger
Figur 4
Klikk på Vis og på dialogboksen Vis innhold.; under Verdi skrive inn følgende linje: 5985: TCP: *: Enabled: WinRM som vist nedenfor:
Figur 5
La WinRM tjenesten til automatisk lytte etter HTTP-forespørsler
Igjen bruker Group Policy Management, som innstillingen kan under Datamaskinkonfigurasjon \\ Administrative maler \\ Windows-komponenter \\ Windows Remote Management (WinRM) \\ WinRM tjenesten.
Figur 6
Høyreklikk Tillat ekstern serverstyring via WinRM og velg Rediger. Klikk på Enabled og angi IPv4 og IPv6-filtre, som definerer hvilke IP-adresser lyttere vil bli konfigurert på. Du kan skrive inn * wildcard for å angi alle IP-adresser.
Figur 7
Sett WinRM tjenesten skal starte automatisk
Denne innstillingen kan bli funnet på Computer Configuration \\ Windows-innstillinger \\ Security Settings \\ System Services \\ Windows Remote Management (WS-Management).
Figur 8
Høyreklikk Windows Remote Management (WS-Management), velg Egenskaper og sette oppstartsmodus til « automatisk ”.
Figur 9
Når alle de foregående GPO innstillingene er fullført, og gruppen policyen brukes, domene datamaskiner i politikken Omfanget vil være klar til å ta imot innkommende Powershell Remoting tilkoblinger.
Bruke Remoting
Det er to vanlige alternativer for nærmer remoting med Powershell. Den første er kjent som en-til-en remoting, der du gjør en enkelt ekstern tilkobling og en melding vises på skjermen der du kan skrive inn kommandoer som kjøres på den eksterne datamaskinen. På overflaten ser denne sammenhengen som en SSH eller Telnet-økt, selv om det er en helt annen teknologi under panseret. Det andre alternativet er kalt en-til-mange remoting, og det er spesielt egnet for situasjoner når det kan være lurt å kjøre de samme kommandoene eller skript i parallell til flere eksterne datamaskiner.
Ett-to-One Remoting (1 : 1)
Enter-PSSession cmdlet brukes til å starte et en-til-en remoting økt. Etter at du utfører kommandoen, til Windows Powershell linjen endrer angi navnet på datamaskinen som du er koblet til. Se figuren nedenfor.
Figur 10
I løpet av denne en-til-én økt, blir kommandoene du skriver på økten teksten transportert til den eksterne datamaskinen for gjennomføring. Kommandoene ’ Utgangen er serialisert i XML-format og sendes tilbake til datamaskinen, som deretter deserializes XML-data til objekter og bærer dem inn i Windows Powershell rørledningen. På møtet spørsmål, er du ikke begrenset til bare å skrive inn kommandoer, kan du kjøre skript, import Power moduler, eller legge PSSnapins som er registrert til den eksterne datamaskinen.
Det er noen begrensninger på denne remoting funksjon som du trenger å være klar over. Som standard, bare WinRM tillater eksterne tilkoblinger til selve datamaskinen navn; IP-adresser eller DNS aliaser vil mislykkes. Powershell ikke laste profil skript på den eksterne datamaskinen; å kjøre andre Powershell script; henrettelsen politikk på den eksterne datamaskinen må være satt til å tillate det. Hvis du bruker Enter-PSSession cmdlet i et skript, vil skriptet kjøres på den lokale maskinen for å gjøre tilkoblingen, men ingen av skriptkommandoer ville bli henrettet eksternt fordi de ikke ble inngått interaktivt i økten teksten, etter < h2> En-til-mange Remoting
Med en-til-mange Remoting, kan du sende en enkelt kommando eller script til flere datamaskiner samtidig. Kommandoene transporteres og henrettet på eksterne datamaskiner, og hver datamaskin serialiserer resultatene i XML-format før du sender dem tilbake til datamaskinen. Datamaskinen deserializes XML utgang til objekter og flytter dem til rørledningen i dagens Powershell sesjon.
Invoke-Command cmdlet brukes til å utføre en-til-mange Remoting tilkoblinger. Den -ComputerName parameter av Invoke-Command godtar en rekke navn (strenger); det kan også motta navnene fra en fil eller få dem fra en annen kilde. For eksempel:
En kommaseparert liste av datamaskiner:
-ComputerName FS1, CoreG2, Server1
Leser navn fra en tekstfil kalt servers.txt:
-ComputerName (Get-Content C: \\ Servers.txt)
Leser en CSV-fil som heter Comp.csv som har en datamaskin kolonne med data navn
-ComputerName (Import-. CSV C: \\ Comp.csv | Select – Utvid Computer)
spørringer Active Directory for dataobjekter
-ComputerName (Get-ADComputer – filter * | Velg – Utvid Name)
Her er et eksempel på bruk Remoting å få MAC-adressene til en gruppe datamaskiner:
< code >
Invoke-Command -ComputerName FS1, CoreG2, Server1 - ScriptBlock `
{Get-NetAdapter | Select-Object-Eiendoms SystemName, navn, macaddress | Bedrifter
Format-Table}
< /code >
Her er det utgang:
Figur 11
Her er et annet eksempel: La ’ s si at du må opprette en mappe på hver datamaskin for å lagre drivere og, på samme tid, du vil tildele full kontroll tillatelse til en domenebruker, oppkalt Bruker1, for å få tilgang til mappen. Her er en måte du kan kode løsningen:
< code >
Invoke-Command -ComputerName FS1, CoreG2, Server1, Win81A `
-ScriptBlock {New- Sak -ItemType Directory -Path c: \\ Drivers
$ acl = Get-Acl c: \\ Drivers
$ User1P = "lanztek \\ Bruker1", "FullControl", "Tillat"
$ user1A = Ny-Object System.Security.AccessControl.FileSystemAccessRule $ User1P
$ acl.SetAccessRule ($ User1A)
$ acl | set-acl c: \\ Drivers}
< /code >
Den foregående skriptet kan kjøres fra en hvilken som helst tilgjengelig datamaskin i nettverket. Det skaper en mappe som heter “ Drivere og rdquo; på roten av C-stasjonen på hver og en av datamaskinene som den berører
$ aclvariable lagrer sikkerhetsbeskrivelse av driverne mapper.; $ User1P definerer tillatelsesnivået for Bruker1 (full kontroll). The $ User1A variabelen innehar et nytt objekt som definerer en tilgangsregel for en fil eller katalog. $ User1A brukes til å endre sikkerhetsbeskrivelse ($ ACL). Den siste linjen i skriptet rør den endrede sikkerhetsbeskrivelse ($ ACL) til Set-Acl cmdlet. Endelig gjelder Set-Acl cmdlet sikkerhetsbeskrivelse til Drivers-mappen.
Når skriptene utfører, får du umiddelbar bekreftelse på at mappen er opprettet på hver enkelt av de eksterne datamaskiner.
Figur 12
En-til-mange-remoting kan brukes igjen for å kontrollere at Bruker1 har full kontroll tillatelse til Drivers mappe:
< code >
Invoke- Command -ComputerName FS1, CoreG2, Server1, Win81A `
-ScriptBlock {get-acl c: \\ drivers | Bedrifter
Velg-Object PSComputername, AccessToString}
< /code >
Figur 13
Som standard kobler Remoting opptil 32 datamaskiner samtidig. Hvis du inkluderer mer enn 32 datamaskiner, begynner Powershell jobber med det første 32 og køer de gjenværende. Som datamaskiner fra første batch fullføre sine oppgaver, er de andre trukket fra køen for behandling. Det er mulig å bruke Invoke-Command cmdlet med -ThrottleLimit parameter for å øke eller redusere det tallet
Vedvarende PSSessions
Når du bruker Invoke-Command med –. Computer parameter, fjern datamaskinen skaper en ny forekomst av Powershell til å kjøre kommandoer eller skript, sender resultatene tilbake til deg, og deretter lukker økten. Hver gang Invoke-Command går, selv om det gjør med de samme datamaskiner, er en ny sesjon opprettet og arbeidet gjort av en tidligere sesjon vil ikke være tilgjengelig i minnet til den nye forbindelsen. Det samme kan sies når du bruker Enter-PSSession med –. Computer parameter og deretter avslutte tilkoblingen ved å lukke konsollen eller bruker Exit-PSSession kommandoen
Det er godt å vite at Powershell har evne til å etablere faste tilkoblinger (PSSessions) ved hjelp av New-PSSession cmdlet. New-PSSession lar deg starte en tilkobling til en eller flere eksterne datamaskiner og starter en forekomst av Windows Powershell på hver målmaskinen. Så du kjører på Enter-PSSession eller Invoke Command med sin – Session parameter å bruke den eksisterende PSSession stedet for å starte en ny økt. Nå kan du utføre kommandoer på den eksterne datamaskinen og avslutte økten uten å drepe tilkoblingen. Superb
I det følgende eksempel er New-PSSession cmdlet brukes til å lage fire forskjellige PSSessions!; de PSSessions lagres i et variabelnavn $ servere. Get-Content leser datamaskinen navn fra en tekstfil kalt Servers.txt og gi denne informasjonen til New-PSSession via -ComputerName parameter
<. Code >
$ Servers = New- PSSession -ComputerName (Get-Content c: \\ Servers.txt)
< /code >
Etter å ha kjørt kommandoen, skriver $ servere eller Get-PSSession vil tillate deg å bekrefte at øktene har blitt opprettet.
Figur 14
Lukke Merknader
Remoting er en brannmur-vennlig funksjon som er avhengig av WS-Management (WS-Man) åpen standard protokoll for å funksjon. Microsoft implementerer og forvalter WS-Man via WinRM tjenesten. Denne artikkelen viser hvordan du kan administrere fra en liten til et stort antall datamaskiner med Windows Powershell Remoting å bruke interaktive sesjoner, en-til-en, en-til-mange og vedvarende PSSessions. Men vent, det ’ s mer. Vi har ikke snakket ennå om multihop Remoting, implisitt Remoting, administrerende ikke-domene datamaskiner, eller Powershell nettilgang. Disse og andre temaer vil bli forklart og demonstrert i vår neste artikkel i denne serien.
Denne artikkelen ble opprinnelig publisert av
Intense Skole
. Anmeldelser