Hemsida » hur » Geek School Lär dig att använda Remoting i PowerShell

    Geek School Lär dig att använda Remoting i PowerShell

    En av de bästa funktionerna PowerShell erbjuder är möjligheten att fjärrhantera dina servrar. Det låter dig även hantera en massa av dem samtidigt.

    Var noga med att läsa de föregående artiklarna i serien:

    • Lär dig hur du automatiserar Windows med PowerShell
    • Att lära sig använda Cmdlets i PowerShell
    • Lär dig hur man använder objekt i PowerShell
    • Learning Formatering, filtrering och jämförelse i PowerShell

    Och håll dig uppdaterad för resten av serien hela veckan.

    Vad är Remoting?

    Bulkhantering av dina servrar kan vara tråkig, och om du måste ändra en IIS-konfiguration på 50 webbservrar innan, vet du vad jag menar. Det här är de typer av situationer när PowerShell Remoting och språkets skriptsförmåga kan komma till räddning. Med hjälp av HTTP eller säkrare HTTPS kan PowerShell Remoting du skicka kommandon till en fjärrmaskin i ditt nätverk. Maskinen kör sedan kommandon och skickar utmatningen tillbaka till dig, som i sin tur visas på skärmen.

    Låt oss bli tekniskt

    Kärnan i PowerShell Remoting ligger en enda Windows-tjänst, Windows Remote Management eller WinRM-tjänsten, som den har blivit känd. Med WinRM kan du konfigurera en eller flera sessionskonfigurationer (även kända som slutpunkter), som i grunden är filer som innehåller information om den erfarenhet du vill ge till den person som ansluter till din externa PowerShell-instans. Mer specifikt kan du använda sessionskonfigurationsfiler för att definiera vem som kan och vem inte kan ansluta till förekomsten, vilka cmdlets och skript som de kan köra, samt vilken säkerhetskontext sessionen måste köras under. Med WinRM-tjänsten skapar du också "lyssnare", som lyssnar på inkommande PowerShell-förfrågningar. Dessa "lyssnare" kan antingen vara HTTP eller HTTPS och kan vara bundna till en enda IP-adress på din maskin. När du öppnar en PowerShell-anslutning till en annan maskin (tekniskt görs det med WS-MAN-protokollet, baserat på HTTP), binder anslutningen till en av dessa "lyssnare". "Lyttarna" har sedan ansvaret för att skicka trafiken till den ansökan som är associerad med den lämpliga sessionskonfigurationsfilen. applikationen (normalt PowerShell men du kan ha andra hosting-applikationer om du vill) kör sedan kommandot och matar resultaten tillbaka genom "lyssnaren" över nätverket och tillbaka till din maskin.

    Visa mig hur

    Det första du behöver göra är att aktivera Remoting på den maskin du vill ansluta till. Detta kan göras genom att köra följande:

    Möjliggöra-PSRemoting

    Du måste då svara ja på alla anvisningar. När du kör Enable-PSRemoting, görs några ändringar på din dator:

    • WinRM-tjänsten startas.
    • WinRM-tjänsten ändras från manuell startläge till automatisk.
    • Det skapar en HTTP-lyssnare som är bunden till alla dina nätverkskort.
    • Det skapar också ett inkommande brandväggs undantag för WS-MAN-protokollet.
    • Vissa standard sessionskonfigurationer skapas

    Om du kör Windows 7 och ditt nätverkskort är inställt på Offentligt, kommer PowerShell Remoting att misslyckas. För att fixa det, byt du bara till hem- eller arbetsnätverksplatsen. Alternativt kan du hoppa över nätverkskontrollen med hjälp av följande:

    Aktivera-PSRemoting -SkipNetworkProfileCheck

    Vi rekommenderar dock att du ändrar din nätverksplats.

    Det finns två sätt att ansluta till en annan maskin med PowerShell. Det finns en till en metod, som mycket liknar att använda SSH, och då finns det en till många metoder.

    Använda en PowerShell-session

    Det första sättet att ansluta till en fjärrmaskin med PowerShell använder något som kallas en PowerShell-session. Enkelt uttryckt en session gör att du kan köra kommandon på fjärrmaskinen på ett interaktivt sätt, ungefär samma som du skulle på din egen maskin. För att öppna en session skriver du bara följande:

    Enter-PSSession -ComputerName "Darlah"

    Prompten kommer att få ett prefix som betyder att maskinen körs mot cmdlets.

    Härifrån kan du verkligen behandla prompten som om du satt på fjärrmaskinen. Om du till exempel vill se alla filerna på C: \ -drevet kan du göra det enkelt:

    Get-ChildItem -Path C: \

    Om du kommer från en Linux-bakgrund kan du tänka på att använda den här en till en metod för avlägsnande som PowerShell-alternativet till SSH.

    Använda Invoke-Command

    Det andra sättet att använda PowerShell på en fjärrmaskin är att använda Invoke-Command. Fördelen att använda Invoke-Command kommer från det faktum att du kan utföra samma kommando på flera maskiner samtidigt. Som du kan tänka dig är det här särskilt användbart när du vill göra något som att samla händelsesloggar från dina servrar. Invoke-Command följer följande syntax:

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

    Eftersom kommandot körs parallellt över alla maskiner behöver du något sätt för att se vilken dator ett givet resultat kom ifrån. Du kan göra detta genom att titta på egenskapen PSComputerName.

    När du använder Invoke-Command har du inte längre de objekt som du kan förvänta dig i Pipeline. Du ser, för att PowerShell ska kunna få informationen från fjärrmaskinen tillbaka till din maskin, behöver de något sätt att representera objekten som kommandot du körde på fjärrmaskinens utgångar. Dessa dagar verkar det valda sättet att representera en hierarkisk datastruktur är att använda XML, vilket innebär att när du utfärdar ett kommando med Invoke-Command, blir resultaten först serialiserade till XML innan de skickas tillbaka till din maskin. När de kommer tillbaka till din maskin, deserialiseras de tillbaka till ett föremål. gotcha här är att när de är deserialiserade, alla metoder, med undantag för ToString () -metoden, som föremålet hade, avlägsnades bort från det.

    Obs! Det finns några undantag från denna regel, till exempel kan de flesta primitiva typer som heltal deserialiseras med dess metoder. Det finns också en process som heter Rehydration, där vissa metoder kan läggas till deserialiserade objekt. Så var försiktig och kom ihåg att Get-Member är din vän.

    Läxa

    • Läs Secrets of PowerShell Remoting ebook av Don Jones.