Heb je ooit PowerShell-opdrachten op een externe machine willen uitvoeren vanuit het comfort van je werkstation? Nou, met PowerShell Remoting kan dat. Met externe PowerShell kun je opdrachten en scripts uitvoeren op meerdere externe systemen op een duurzame manier.
Klinkt interessant? Lees verder om te leren hoe je die externe machines op de PowerShell-manier onder controle krijgt.
Vereisten
Deze tutorial zal een praktische demonstratie zijn. Als je wilt volgen, zorg er dan voor dat je minstens drie computers hebt met PowerShell 7. Een daarvan zal je beheercomputer zijn, en de andere twee zullen de externe machines zijn.
Deze tutorial zal de volgende computers gebruiken.
- A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
- A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
- A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
- Linux-machine met SSHD ingeschakeld om te dienen als een externe PowerShell-eindpunt via SSH. Deze handleiding maakt gebruik van Fedora 35.
- Een gebruikersaccount om opdrachten op afstand uit te voeren op de Linux-machine. Het account moet sudo– en SSH-toegang hebben. Deze handleiding maakt gebruik van een account met de naam test. Maak op dit moment een gebruikersaccount aan als je er nog geen hebt op je Linux-machine.
Het inschakelen van externe PowerShell op Windows via WinRM
Wanneer je PowerShell 7 installeert, is er een optie om PowerShell-remoting in te schakelen en je hebt het misschien toen ingeschakeld. Maar om zeker te zijn, volg je de onderstaande stappen om externe PowerShell in te schakelen.
1. Log in op de externe Windows 10-pc.
2. Open PowerShell als beheerder.
3. Voer de onderstaande opdracht uit om externe PowerShell in te schakelen.
De opdracht voert verschillende configuratiewijzigingen uit, die je op de console zult zien.

Het inschakelen van Remote PowerShell op Linux via SSH
WinRM is exclusief voor Windows, wat betekent dat je geen Remote PowerShell kunt inschakelen op Linux met WinRM. In plaats daarvan kun je Remote PowerShell via SSH op Linux inschakelen. Als je PowerShell al hebt geïnstalleerd, volg dan de onderstaande stappen.
1. Log in op je externe Linux-systeem en open een terminalsessie.
2. Open het configuratiebestand van de SSH-server in een teksteditor. Gebruik een teksteditor naar keuze, zoals Gedit, Sublime of Nano. Dit voorbeeld gebruikt Gedit.
3. Voeg vervolgens de onderstaande regel toe aan het bestand. Deze regel creëert een SSH-subsysteem dat een PowerShell-proces host.

4. Sluit de editor.
5. Herstart tot slot de SSH-server door de volgende opdracht uit te voeren.
Het toevoegen van vertrouwde hosts voor Remote PowerShell op de lokale machine
Op dit punt is je externe computer klaar om commando’s te ontvangen. Maar je beheercomputer kan weigeren verbinding te maken met de externe PowerShell-hosts als ze niet op de lijst met vertrouwde hosts staan. Voeg de externe hosts toe aan je lijst met vertrouwde hosts om mogelijke problemen met extern beheer te voorkomen.
Open PowerShell als beheerder op je beheercomputer.
Voer de onderstaande `winrm` opdracht uit. Deze opdracht voegt uw externe Windows (`192.168.8.107`) en Linux (`192.168.8.171`) machines toe aan de vertrouwde hostslijst van uw computer.

Opdrachten uitvoeren op externe computers
Met alle stukjes op hun plaats, zult u commando’s uitvoeren op de externe machine in dit gedeelte.
1. Open een nieuwe PowerShell-sessie op uw beheercomputer.
2. Voer nu de onderstaande `Invoke-Command` opdracht uit om de eerste vijf services op de externe machine weer te geven als gebruiker `ma`. Het uit te voeren commando verschijnt tussen de accolades van de `ScriptBlock` schakelaar, zoals hieronder weergegeven.

3. Om hetzelfde uit te voeren met een externe Linux-host, voert u in plaats daarvan de onderstaande opdracht uit. Let op dat ` -HostName` ` -ComputerName` heeft vervangen en ` -UserName` ` -ComputerName` heeft vervangen. Deze parameters geven aan de `Invoke-Command` cmdlet aan dat het doel een SSH-host is.

Scripts uitvoeren op externe computers
U kunt ook een PowerShell-scriptbestand uitvoeren op een externe computer met de `Invoke-Command` cmdlet. Maar in plaats van de `-ScriptBlock` parameter te specificeren, geeft u de `-FilePath` parameter op, gevolgd door het lokale pad van het script.
1. Maak eerst een PowerShell-scriptbestand genaamd nametime.ps1
op uw lokale computer.
2. Open het script in uw voorkeursscripteditor en voeg de volgende code toe. Sla het bestand daarna op.

3. Voer het Invoke-command
cmdlet uit met de parameter -FilePath
. De -FilePath
moet verwijzen naar het scriptbestand. In dit voorbeeld staat het scriptbestand in dezelfde werkmap.

Beheer van een externe computer Interactief
In de vorige sectie zag je hoe je individuele commando’s kunt uitvoeren op een externe machine. In deze sectie leer je een interactieve sessie te openen, zodat je meerdere commando’s op de externe machine kunt uitvoeren alsof het lokaal is.
1. Voer het Enter-PSSession
commando uit om een externe sessie te starten op de machine op 192.168.8.107
als gebruiker ma
.
Voer het wachtwoord van de externe gebruikersaccount, ma, in zoals hieronder wordt weergegeven.

Je ziet een nieuwe prompt, zoals hieronder weergegeven. Het IP-adres tussen de vierkante haken geeft de externe PowerShell-host aan.

3. Lijst de bestanden in de huidige werkmap op met het dir
commando, zoals hieronder wordt weergegeven. Je kunt zoveel PowerShell-commando’s uitvoeren als je wilt binnen een sessie dir
De inhoud van de map zou op je scherm moeten staan, zoals in de onderstaande schermafbeelding.

4. Voer het Exit-PSSession
cmdlet uit om de sessie te verlaten zodra je klaar bent met het beheren van de externe machine.
Na het verlaten zou je terug moeten keren naar een lokale prompt, zoals in de onderstaande schermafbeelding.

Het verbreken en opnieuw verbinden van externe PowerShell-sessies
Het is mogelijk om een sessie persistent op te slaan als alternatief voor interactieve sessies of eenmalige opdrachten. Het opslaan van een sessie maakt het mogelijk om tussen sessies te schakelen zonder context te verliezen. In dit gedeelte leert u hoe u persistente sessies kunt maken en beheren.
1. Voer de opdracht New-PSSession
uit om een sessie te maken op de externe computer 192.168.8.107
als gebruiker ma
(-Credential
). Sla de sessie op in de variabele $var
, zoals hieronder wordt weergegeven.
2. Voer de variabele $var
uit om de inhoud ervan weer te geven, zoals hieronder wordt weergegeven.
Zoals hieronder wordt weergegeven, zou u een sessieobject moeten zien met een RemoteMachine ComputerType en State ingesteld op Opened.

3. Voer het commando Enter-PSSession
uit om de sessie opgeslagen in $var
binnen te gaan.
Als alles goed gaat, verandert de prompt in een externe prompt zonder verdere uitvoer, zoals hieronder wordt weergegeven.

4. Maak een variabele $rem1
aan binnen de sessie. Gebruik een willekeurige variabelenaam en identificatiestring die bij u past. U zult deze variabele later gebruiken om te bepalen of u verbonden bent met dezelfde sessie.
5. Voer het onderstaande commando uit om de externe PowerShell-sessie te verlaten.

6. Herstel een externe PowerShell-sessie.
7. Voer de variabele $rem1
uit bij de externe sessieprompt, zoals hieronder wordt weergegeven, om de waarde ervan weer te geven.
Je zou dezelfde waarde moeten zien die je eerder hebt ingesteld voordat je de externe PowerShell-sessie afsluit, wat bevestigt dat je opnieuw verbonden bent met dezelfde sessie.

8. Voer het Exit-PSSession
-commando uit om de sessie opnieuw te verlaten zoals hieronder.
9. Voer ten slotte Invoke-Command
uit met de session
-schakelaar ingesteld op $var
om de hostnaam van de externe machine in dezelfde externe sessie te tonen. Deze methode is een alternatieve manier om commando’s uit te voeren in dezelfde sessie zonder handmatig verbinding te maken, los te koppelen en opnieuw verbinding te maken met een enkele sessie.

10. Voer Remove-PSSession
uit om de sessie die is opgeslagen in $var
volledig te verwijderen.
Conclusie
Gefeliciteerd! Aan het einde van deze tutorial heb je geleerd hoe je een Windows- of Linux-systeem beheert met externe PowerShell. Deze handleiding had tot doel je een eerste kennismaking te geven. Waarom neem je niet de duik door dieper in te gaan op PowerShell op Linux via een externe sessie?