Hoe voer je een PowerShell-script uit vanaf de opdrachtregel en meer

Als u nieuw bent in de PowerShell-scriptingtaal en wilt leren hoe u een PowerShell-script uitvoert, bent u hier aan het juiste blogbericht. Dit blog zal een tutorial zijn over de gebruikelijke manieren om scripts uit te voeren en enkele problemen die zich kunnen voordoen.

Vereisten

Dit artikel zal een stapsgewijze handleiding voor u zijn over hoe u PowerShell op uw lokale computer kunt uitvoeren. Als u wilt meedoen, zorg er dan voor dat u de volgende vereisten hebt voordat u met dit artikel begint.

  • A Windows 10 computer with Administrator privileges.
  • Windows PowerShell-versie 5 of hoger. U kunt ook PowerShell v7 gebruiken. Deze tutorial richt zich op Windows PowerShell omdat het al aanwezig is in het Windows-besturingssysteem.
  • Elke teksteditor

Omgaan met het uitvoeringsbeleid

Als dit de eerste keer is dat u probeert een Windows PowerShell-script uit te voeren, kunt u een veelvoorkomend probleem tegenkomen. PowerShell geeft waarschijnlijk een foutmelding terug waarin staat dat een script “niet kan worden geladen omdat het uitvoeren van scripts is uitgeschakeld op dit systeem”.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell geeft het bovenstaande foutbericht terug wanneer je probeert een PowerShell-script uit te voeren met een uitvoeringsbeleid ingesteld op Restricted, Remote Signed of All Signed.

Restricted

Restricted is het standaardbeleid voor Windows-clientcomputers. Als je PowerShell voor de eerste keer gebruikt, zal je standaardbeleid waarschijnlijk zijn ingesteld om alle scripts te beperken.

Je kunt nog steeds individuele commando’s uitvoeren in een terminal, maar geen scriptbestand. De beperking omvat elk bestand dat eindigt op .ps1xml, .psm1 of .ps1.

Unrestricted

Unrestricted stelt je in staat om elk script uit te voeren. Het waarschuwt echter vóór uitvoering als het script van internet is gedownload. Dit beleid is meestal standaard voor niet-Windows-apparaten.

Remote Signed

Remote Signed-beleid stelt je in staat om elk script uit te voeren dat ofwel (a) digitaal is ondertekend of (b) elk script dat op je lokale computer is geschreven, met of zonder handtekening.

Als een script van internet wordt gedownload en niet is ondertekend, moet je het bestand deblokkeren. Dit kun je doen door met de rechtermuisknop op het bestand te klikken en Eigenschappen te kiezen. Of je kunt de Unblock-File PowerShell-cmdlet gebruiken voor dat specifieke scriptbestand.

Het gebruik van een Remote Signed-beleid is een ideale optie bij het uitvoeren van een script dat van internet is gedownload.

All Signed

All Signed vereist dat alle scripts digitaal zijn ondertekend door een vertrouwde uitgever. Dit geldt ook voor scripts die van internet zijn gedownload en lokaal op je computer zijn geschreven.

Het wijzigen van de PowerShell-uitvoeringsbeleid

Om het uitvoeringsbeleid te wijzigen:

  1. Open Windows PowerShell met Uitvoeren als Administrator om ervoor te zorgen dat je de hoogste toestemming hebt om de beleidswijzigingen te maken.
Search PowerShell in Start Menu

2. Wanneer geopend, voer dan de volgende PowerShell-opdracht uit om het uitvoeringsbeleid van je computer in te stellen. Het uitvoeringsbeleid, zoals hierboven besproken, kan een van drie verschillende typen zijn. Deze tutorial maakt gebruik van een nuttig maar toch veilig uitvoeringsbeleid van RemoteSigned.

Aangezien deze tutorial ervan uitgaat dat je het scriptbestand GetServices.ps1 van internet hebt gedownload, stel het uitvoeringsbeleid dan in op RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

Het uitvoeringsbeleid RemoteSigned dwingt je om elke PowerShell-script die je van internet hebt gedownload cryptografisch te ondertekenen voordat PowerShell het op je systeem zal uitvoeren.

3. Je zou een uitvoer moeten zien waarin wordt gevraagd om de actie te bevestigen. Typ Y en druk op Enter om de beleidswijziging te bevestigen.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

Op dit punt, volg de volgende stappen om verschillende methoden te verkennen om het PowerShell-script op je computer uit te voeren.

Hoe PowerShell-script uitvoeren

Om een PowerShell-script uit te voeren, heb je eigenlijk een scriptbestand nodig om uit te voeren! Als je er geen bij de hand hebt, kun je dit ZIP-bestand downloaden en het PS1-bestand eruit halen. Je zult een eenvoudig scriptbestand genaamd GetServices.ps1 vinden.

Write-Output "Listing Computer Services"
Get-Service

Elk PowerShell-script moet eindigen met een .ps1-extensie.

Het Gebruik van de Console

Zodra je een script klaar hebt, zijn er verschillende manieren om een PowerShell-scriptbestand uit te voeren. Een van de meest voorkomende manieren is via de PowerShell-console.

Om dit te doen:

  1. Open de PowerShell-console zoals hierboven weergegeven.

2. Navigeer naar de bestandslocatie van je script met behulp van het Set-Location-PowerShell-cmdlet of de cd-alias. Het script van deze tutorial is te vinden in de C:\Temp-directory.

PS> cd C:\Temp\

3. Voer het script uit met behulp van een punt (.) notatie. PowerShell is een shell die ook naar opdrachtnamen zoekt. Om onderscheid te maken tussen een PowerShell-opdracht en een script, moet je het script voorzien van een punt. Dit punt vertegenwoordigt de huidige directory.

 PS> .\GetServices.ps1

Hoe je een PowerShell-script uitvoert vanaf de opdrachtregel via de PowerShell-locatie

Als je geen scripts kunt of liever niet via de PowerShell-console wilt uitvoeren, kun je dat ook doen met de goede oude opdrachtregel (command prompt).

Om scripts uit te voeren via de opdrachtprompt, moet je eerst het PowerShell-uitvoerbaar bestand (powershell.exe) starten, met de locatie van PowerShell C:\Program Files\WindowsPowerShell\powershell.exe en vervolgens het scriptpad als parameter doorgeven.

Je kunt scripts met parameters uitvoeren in elke context door ze eenvoudigweg te specificeren bij het uitvoeren van het PowerShell-uitvoerbaar bestand zoals powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

Zodra je cmd.exe opent, kun je een PowerShell-script uitvoeren zoals hieronder weergegeven. Dit voorbeeld voert de engine uit en geeft het het scriptpad van C:\Temp\GetServices.ps1.

Let op dat het voorbeeld hieronder het pad van de PowerShell-locatie gebruikt om het script uit te voeren. Dit moet je doen als de map niet ergens in je PATH staat.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

De PowerShell-locatie voor PowerShell 7 gebruikt een ander uitvoerbaar bestand genaamd pwsh.exe meestal te vinden in C:\Program Files\PowerShell\7\pwsh.exe.

Hieronder staat een handige YouTube-video die het uitvoeren van een script via een batchbestand behandelt dat door cmd.exe wordt uitgevoerd.

Het gebruik van de PowerShell ISE

Als je je eigen scripts maakt of die van anderen bewerkt, zul je waarschijnlijk een scripteditor gebruiken zoals de PowerShell ISE of misschien Visual Studio (VS) Code. Aangezien de ISE wordt geleverd met Windows, richten we ons voor deze tutorial op die methode.

Om een script via de ISE aan te roepen:

  1. Navigeer naar het Startmenu, zoek naar PowerShell ISE en open het.
Search PowerShell ISE in Start Menu

2. Klik op BestandOpenen en zoek je script op.

Open Script using File Menu

3. Met het script geopend, klik op de groene uitvoeringsknop om het script uit te voeren. Deze knop zal het script aanroepen in de ingebouwde PowerShell-terminal onderaan.

Run Script using PowerShell ISE

De Uitvoer van het Voorbeeldscript

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Als je het voorbeeldscript GetServices.ps1 uitvoert, zie je het volgende. Dit script voert het Get-Service-cmdlet uit, dat alle services retourneert die zijn geïnstalleerd op je lokale Windows-computer.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Een PowerShell-script uitvoeren vanuit een ander script

Stel dat je twee scripts hebt en je wilt dat het ene het andere aanroept. Misschien heb je een script genaamd GetUser.ps1 en een genaamd ResetPassword.ps1. Binnen het GetUser.ps1-script wil je het ResetPassword.ps1-script uitvoeren om een gebruikerswachtwoord te resetten.

In het aanroepende script (GetUser.ps1) voeg je een regel toe om het andere script uit te voeren, net zoals je het script vanaf de opdrachtregel zou aanroepen.

Je kunt hieronder een aantal opties zien. Je zou er meestal voor moeten kiezen om het andere script binnen dezelfde sessie of scope uit te voeren om dingen te vereenvoudigen, tenzij je een specifieke reden hebt om het script in een andere PowerShell-sessie uit te voeren.

## Om het andere script in een nieuwe sessie uit te voeren
powershell.exe .\ResetPassword.ps1
## Om het andere script in dezelfde sessie uit te voeren
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/