Daily Archives

One Article

Powershell/remoting

Remoting med Powershell 2.0

Posted by ragnar harper on

Med remoting kan du utføre kommandoer på andre maskiner enn du sitter på. Du kan med andre ord utføre kommandoer på andre maskiner, og få resultatet overført til din egen maskin. Resultatet vil som vanlig være objekter. Remoting er en universell teknologi i Powershell som ikke setter bestemte krav til hver enkelt CmdLet. Det finnes Cmdlets i Powershell som benytter Microsoft .NET Framework metoder for å innhente informasjon fra andre maskiner enn du sitter på. Disse cmdlets benytter ikke remoting, og kan fortsatt benyttes uten at man setter opp remoting. Eksempel på disse cmdlets er Get-Service,Get-Process,Get-WmiObject, Get-EventLog og Get-WinEvent.

Oppsett av Remoting

For å benytte remoting med Powershell 2.0 kreves følgende:

· Windows Powershell 2.0 eller nyere

· Microsoft .NET Framework 2.0 eller nyere

· Windows Remote Management 2.0

Windows 7 og Windows Server 2008 R2 kommer med Powershell 2.0. Du kan sjekke dette med

$PSVersionTable.Version.Major

Windows 7 og Windows Server 2008 R2 kommer også med Windows Remote Management 2.0. Windows Remote Management kan også installeres separat på Windows XP samt Windows Server 2003 og nyere.

Krav til brukerrettigheter

For å etablere en fjerntilkobling og eksekvere kommandoer må brukeren være medlem av den lokale administrator gruppa på maskinen det kobles til. Eventuellt må brukeren kunne oppgi brukernavn og passord på en bruker som er medlem i administrator gruppa på maskina.

Når kreves det administrator rettigheter (Run As Administrator)?

Kjører du Windows Vista , Windows Server 2008 eller nyere må du starte Powershell som administrator for å utføre følgende oppgaver knyttet til remoting:

· Etablere fjerntilkobling til lokal maskin (loopback scenario)

· Gjøre konfigurasjonsendringer på remoting

· Se eller endre WS-Management innstillinger på lokal maskin. (egenskaper under WSMAN:)

Konfigurering av maskinen for remoting

Remoting er basert på WinRM tjenesten som er Microsoft sin implementering av WS-Management

(Web Services for Management).

Prosedyre for å aktivere remoting:

· Start Powershell med administrator rettigheter (Run As Administrator)

· Kjør følgende commando:

Enable-psremoting

clip_image002

Etter å ha kjørt enable-psremoting kan du sjekke om miljøet fungerer lokalt gjennom bruk av kommandoen new-pssession

clip_image004

New-PsSession cmdlet etablerer en egen remote tilkobling til lokal maskin. (loopback).

Problemer?

Merk at nettverkstilkoblingen må være av typen Work eller Home for at brannmuren skal tillate Remoting forespørsler. Hvis nettverkstilkoblingen har status Public vil remoting være blokkert i brannmuren.

Bruk av Invoke-Command

Vi kan bruke Invoke-Command til å utføre ad-hoc Powershell kommandoer mot en eller flere maskiner.

MERK! I eksemplet under benytter vi . (dot) til å angi lokal maskin.

Invoke-Command –ComputerName . -ScriptBlock {get-process}
Invoke-command -computername maskin1,maskin2, maskin3 -Scriptblock {get-process}

Vi kan også angi script som skal kjøres ved bruk av Invoke-Command cmdlet gjennom parameteren –FilePath :

Invoke-Command –ComputerName maskin1,maskin2,maskin3 –FilePath c:\scripts\report-usage.ps1

Bruk av PSSession

I eksemplene over så kjører du kommandoene uten å ta vare på kontekst. Med dette mener jeg at du ikke kan kjøre en serie med kommandoer som deler data, slik som funksjoner, alias eller variabler mellom kallene. Om du ønsker å ta vare på kontekst oppretter du en PSSession (Poweshell session). Denne gir deg en sesjon som kjører på maskinen, slik at data kan ivaretas mellom kallene.

Følgende eksempel illustrerer dette:

clip_image005

Legg merke til at linje 13 og 14 benytter en PSSession $s til å ivareta kontekst mellom kallene. Derfor fungerer det å sette $a lik 3, for så å lese ut verdien.

I linje 15 og 16 benyttes ikke sesjon. Det betyr at variabelen $a forsvinner etter at den er satt i linje 15, og den har derfor ingen verdi å returnere når jeg leser den i linje 16.