Hoofdstuk 1: Aan de slag met PowerShell
Dit hoofdstuk richt zich op het vinden en starten van PowerShell en het oplossen van de eerste pijnpunten die nieuwe gebruikers ervaren met PowerShell. Volg de voorbeelden in dit hoofdstuk op uw testomgevingcomputer en doorloop deze voorbeelden.
Wat is PowerShell?
Windows PowerShell is een gebruiksvriendelijke opdrachtregelshell en scriptomgeving voor het automatiseren van beheertaken van Windows-systemen. Windows PowerShell is vooraf geïnstalleerd op alle moderne versies van het Windows-besturingssysteem.
Waar vind ik PowerShell?
De eenvoudigste manier om PowerShell in Windows 11 te vinden, is door in de zoekbalk te typen PowerShell
, zoals wordt weergegeven in afbeelding 1-1. U ziet dat er vier verschillende sneltoetsen zijn voor Windows PowerShell.
Windows PowerShell-snelkoppelingen op een 64-bits versie van Windows:
- Windows PowerShell
- Windows PowerShell ISE
- Windows PowerShell (x86)
- Windows PowerShell ISE (x86)
Op een 64-bits versie van Windows hebt u een 64-bits versie van de Windows PowerShell-console en de Windows PowerShell Integrated Scripting Environment (ISE) en een 32-bits versie van elke versie, zoals aangegeven door het achtervoegsel (x86) op de sneltoetsen.
Notitie
Windows 11 wordt alleen geleverd als een 64-bits besturingssysteem. Er is geen 32-bits versie van Windows 11. Windows 11 bevat echter 32-bits versies van Windows PowerShell en windows PowerShell ISE.
U hebt slechts twee sneltoetsen als u een oudere 32-bits versie van Windows gebruikt. Deze sneltoetsen hebben niet het achtervoegsel (x86), maar zijn 32-bits versies.
Ik raad u aan de 64-bits versie van Windows PowerShell te gebruiken als u een 64-bits besturingssysteem gebruikt, tenzij u een specifieke reden hebt voor het gebruik van de 32-bits versie.
Afhankelijk van de versie van Windows 11 die u gebruikt, kan Windows PowerShell worden geopend in Windows Terminal.
Microsoft werkt de PowerShell ISE niet meer bij. De ISE werkt alleen met Windows PowerShell 5.1. Visual Studio Code (VS Code) met de PowerShell-extensie werkt met beide versies van PowerShell. VS Code en de PowerShell-extensie worden niet verzonden in Windows. Installeer VS Code en de extensie op de computer waarop u PowerShell-scripts maakt. U hoeft ze niet te installeren op alle computers waarop u PowerShell uitvoert.
PowerShell starten
Ik gebruik drie verschillende Active Directory-gebruikersaccounts in de productieomgevingen die ik ondersteunt. Ik spiegelde die accounts in de labomgeving die in dit boek werd gebruikt. Ik meld me als domeingebruiker aan bij mijn Windows 11-computer zonder domein- of lokale beheerdersrechten.
Start de PowerShell-console door op de Windows PowerShell-snelkoppeling te klikken, zoals wordt weergegeven in afbeelding 1-1. U ziet dat op de titelbalk van de console Windows PowerShell staat, zoals weergegeven in afbeelding 1-2.
Sommige opdrachten worden prima uitgevoerd wanneer u PowerShell als gewone gebruiker uitvoert. PowerShell neemt echter niet deel aan Gebruikerstoegangsbeheer (UAC). Dit betekent dat het niet kan worden gevraagd om benodigde bevoegdheden voor taken waarvoor de goedkeuring van een beheerder is vereist.
Notitie
UAC is een Windows-beveiligingsfunctie waarmee wordt voorkomen dat schadelijke code wordt uitgevoerd met verhoogde bevoegdheden.
Wanneer u bent aangemeld als gewone gebruiker, retourneert PowerShell een fout wanneer u een opdracht uitvoert waarvoor uitbreiding is vereist. Bijvoorbeeld het stoppen van een Windows-service:
Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceCon
troller:ServiceController) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
ands.StopServiceCommand
De oplossing is om PowerShell uit te voeren als een gebruiker die een lokale beheerder is. Zo heb ik mijn tweede domeingebruikersaccount geconfigureerd. Volgens het principe van minimale bevoegdheden mag dit account geen domeinbeheerder zijn of verhoogde bevoegdheden hebben in het domein.
Als u PowerShell met verhoogde rechten wilt starten, klikt u met de rechtermuisknop op de Windows PowerShell-snelkoppeling en selecteert u Uitvoeren als administrator, zoals wordt weergegeven in afbeelding 1-3.
Windows vraagt u om referenties omdat u bent aangemeld bij Windows als gewone gebruiker. Voer de referenties in van uw domeingebruiker die een lokale beheerder is, zoals wordt weergegeven in afbeelding 1-4.
U ziet dat op de titelbalk van de consolevensters met verhoogde bevoegdheid administrator: Windows PowerShell, zoals wordt weergegeven in afbeelding 1-5.
Nu u PowerShell als beheerder uitvoert, is UAC geen probleem meer wanneer u een opdracht uitvoert waarvoor uitbreiding is vereist.
Belangrijk
U moet PowerShell alleen uitvoeren als beheerder wanneer dit absoluut noodzakelijk is.
Wanneer u zich op externe computers richt, hoeft u PowerShell niet uit te voeren met verhoogde bevoegdheden. Het uitvoeren van PowerShell verhoogde bevoegdheden is alleen van invloed op opdrachten die worden uitgevoerd op uw lokale computer.
U kunt het vinden en starten van PowerShell vereenvoudigen. Maak de snelkoppeling naar PowerShell of Windows Terminal vast aan de taakbalk. Zoek opnieuw naar PowerShell, behalve deze keer met de rechtermuisknop op de taakbalk en selecteer Vastmaken aan taakbalk , zoals wordt weergegeven in afbeelding 1-6.
Belangrijk
De oorspronkelijke versie van dit boek, gepubliceerd in 2017, raadt u aan een snelkoppeling naar de taakbalk vast te maken om automatisch een exemplaar met verhoogde bevoegdheid te starten telkens wanneer u PowerShell start. Vanwege mogelijke beveiligingsproblemen raad ik het echter niet meer aan. Alle toepassingen die u start vanuit een exemplaar met verhoogde bevoegdheid van PowerShell, omzeilen ook UAC en voeren verhoogde bevoegdheden uit. Als u bijvoorbeeld een webbrowser start vanuit een exemplaar met verhoogde bevoegdheid van PowerShell, wordt elke website die u bezoekt met schadelijke code ook verhoogde bevoegdheden uitgevoerd.
Wanneer u PowerShell wilt uitvoeren met verhoogde machtigingen, klikt u met de rechtermuisknop op de PowerShell-snelkoppeling die is vastgemaakt aan de taakbalk terwijl u op Shift drukt. Selecteer Als administrator uitvoeren, zoals wordt weergegeven in afbeelding 1-7.
Uw versie van PowerShell bepalen
Er zijn automatische variabelen in PowerShell waarin statusgegevens worden opgeslagen. Een van deze variabelen is $PSVersionTable
, dat versie-informatie over uw PowerShell-sessie bevat.
$PSVersionTable
Name Value
---- -----
PSVersion 5.1.22621.2428
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.22621.2428
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Als u een versie van Windows PowerShell gebruikt die ouder is dan 5.1, moet u uw versie van Windows bijwerken. Windows PowerShell 5.1 is vooraf geïnstalleerd in de momenteel ondersteunde versies van Windows.
PowerShell versie 7 is geen vervanging voor Windows PowerShell 5.1; het installeert naast Windows PowerShell. Windows PowerShell versie 5.1 en PowerShell versie 7 zijn twee verschillende producten. Zie Migreren van Windows PowerShell 5.1 naar PowerShell 7 voor meer informatie over de verschillen tussen Windows PowerShell versie 5.1 en PowerShell versie 7.
Tip
PowerShell versie 6, voorheen bekend als PowerShell Core, wordt niet meer ondersteund.
Uitvoeringsbeleid
PowerShell-uitvoeringsbeleid bepaalt de voorwaarden waaronder u PowerShell-scripts kunt uitvoeren. Het uitvoeringsbeleid in PowerShell is een veiligheidsfunctie die is ontworpen om onbedoelde uitvoering van schadelijke scripts te voorkomen. Het is echter geen beveiligingsgrens omdat het niet kan voorkomen dat bepaalde gebruikers opzettelijk scripts uitvoeren. Een bepaalde gebruiker kan het uitvoeringsbeleid overslaan in PowerShell.
U kunt een uitvoeringsbeleid instellen voor de lokale computer, huidige gebruiker of een PowerShell-sessie. U kunt ook uitvoeringsbeleid instellen voor gebruikers en computers met Groepsbeleid.
In de volgende tabel ziet u het standaarduitvoeringsbeleid voor huidige Windows-besturingssystemen.
Windows-besturingssysteemversie | Standaarduitvoeringsbeleid |
---|---|
Windows Server 2022 | Extern ondertekend |
Windows Server 2019 | Extern ondertekend |
Windows Server 2016 | Extern ondertekend |
Windows 11 | Beperkt |
Windows 10 | Beperkt |
Ongeacht de beleidsinstelling voor uitvoering, kunt u elke PowerShell-opdracht interactief uitvoeren. Het uitvoeringsbeleid is alleen van invloed op opdrachten die worden uitgevoerd in een script. Gebruik de Get-ExecutionPolicy
cmdlet om de huidige beleidsinstelling voor uitvoering te bepalen.
Controleer de beleidsinstelling voor uitvoering op uw computer.
Get-ExecutionPolicy
Restricted
Geef de beleidsinstellingen voor uitvoering weer voor alle bereiken.
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Alle Windows-clientbesturingssystemen hebben de standaardinstelling voor het uitvoeringsbeleid van Restricted
. U kunt PowerShell-scripts niet uitvoeren met behulp van de Restricted
beleidsinstelling voor uitvoering. Als u het uitvoeringsbeleid wilt testen, slaat u de volgende code op als een .ps1
bestand met de naam Get-TimeService.ps1
.
Tip
Een PowerShell-script is een bestand zonder opmaak dat de opdrachten bevat die u wilt uitvoeren. PowerShell-scriptbestanden maken gebruik van de .ps1
bestandsextensie. Als u een PowerShell-script wilt maken, gebruikt u een code-editor zoals Visual Studio Code (VS Code) of een teksteditor zoals Kladblok.
Wanneer u de volgende opdracht interactief uitvoert, wordt deze zonder fouten voltooid.
Get-Service -Name W32Time
PowerShell retourneert echter een fout wanneer u dezelfde opdracht uitvoert vanuit een script.
.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.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
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Wanneer u een opdracht uitvoert in PowerShell die een fout genereert, leest u het foutbericht voordat u de opdracht opnieuw probeert. U ziet dat het foutbericht aangeeft waarom de opdracht is mislukt:
... het uitvoeren van scripts is uitgeschakeld op dit systeem.
Als u de uitvoering van scripts wilt inschakelen, wijzigt u het uitvoeringsbeleid met de Set-ExecutionPolicy
cmdlet. LocalMachine
is het standaardbereik wanneer u de bereikparameter niet opgeeft. U moet PowerShell uitvoeren als beheerder om het uitvoeringsbeleid voor de lokale computer te wijzigen.
Tenzij u uw scripts ondertekent, raad ik u aan het RemoteSigned
uitvoeringsbeleid te gebruiken.
RemoteSigned
voorkomt dat u gedownloade scripts uitvoert die niet zijn ondertekend door een vertrouwde uitgever.
Lees het about_Execution_Policies Help-artikel voordat u het uitvoeringsbeleid wijzigt om inzicht te krijgen in de gevolgen van de beveiliging.
Wijzig de instelling van het uitvoeringsbeleid op uw computer in RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Als u het uitvoeringsbeleid hebt gewijzigd, wordt in PowerShell de volgende waarschuwing weergegeven:
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"):y
Als u PowerShell niet uitvoert als beheerder, retourneert PowerShell het volgende foutbericht:
Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy],
UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
PowerShell.Commands.SetExecutionPolicyCommand
Het is ook mogelijk om het uitvoeringsbeleid voor de huidige gebruiker te wijzigen zonder dat u PowerShell als beheerder hoeft uit te voeren. Deze stap is niet nodig als u het uitvoeringsbeleid voor de lokale computer instelt op RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Als het uitvoeringsbeleid is ingesteld op RemoteSigned
, wordt het Get-TimeService.ps1
script uitgevoerd.
.\Get-TimeService.ps1
Status Name DisplayName
------ ---- -----------
Running W32Time Windows Time
Samenvatting
In dit hoofdstuk hebt u geleerd waar u PowerShell kunt vinden en starten. U hebt ook geleerd hoe u de versie van PowerShell en het doel van het uitvoeringsbeleid kunt bepalen.
Beoordelen
- Hoe bepaalt u welke PowerShell-versie een computer uitvoert?
- Wanneer moet u PowerShell als beheerder starten?
- Wat is het standaarduitvoeringsbeleid op Windows-clientcomputers en wat voorkomt u?
- Hoe bepaalt u de huidige beleidsinstelling voor PowerShell-uitvoering?
- Hoe wijzigt u het PowerShell-uitvoeringsbeleid?
Verwijzingen
Lees de volgende Help-artikelen over PowerShell voor meer informatie over de concepten die in dit hoofdstuk worden behandeld.
Volgende stappen
In het volgende hoofdstuk leert u meer over de detectie van opdrachten in PowerShell. U leert ook hoe u de Help-bestanden van PowerShell downloadt, zodat u de Help in uw PowerShell-sessie kunt bekijken.