Share via


Hoofdstuk 1: Aan de slag met PowerShell

Ik vind vaak dat presentatoren op vergaderingen en vergaderingen in gebruikersgroepen PowerShell al hebben uitgevoerd wanneer ze presentaties op invoerniveau starten. Dit boek begint met het beantwoorden van de vragen die ik heb gehoord van deelnemers die powerShell nog niet eerder hebben gebruikt in deze sessies.

Dit hoofdstuk richt zich met name op het zoeken en starten van PowerShell en het oplossen van enkele van de eerste pijnpunten die nieuwe gebruikers ervaren met PowerShell. Volg de voorbeelden die in dit hoofdstuk worden weergegeven op uw computer met de Windows 10-testomgeving.

Wat moet ik doen om aan de slag te gaan met PowerShell?

Alle moderne versies van Windows-besturingssystemen worden geleverd met PowerShell geïnstalleerd. Als u een versie gebruikt die ouder is dan 5.1, moet u de nieuwste versie installeren.

Waar vind ik PowerShell?

De eenvoudigste manier om PowerShell in Windows 10 te vinden, is door PowerShell in de zoekbalk te typen, zoals wordt weergegeven in afbeelding 1-1.

Afbeelding 1-1 - Zoeken naar PowerShell in het menu Start

U ziet dat vier verschillende sneltoetsen voor PowerShell worden weergegeven in afbeelding 1-1. Op de computer die wordt gebruikt voor demonstratiedoeleinden in dit boek, wordt de 64-bits versie van Windows 10 uitgevoerd, dus er is een 64-bits versie van de PowerShell-console en de PowerShell ISE (Integrated Scripting Environment) en een 32-bits versie van elke versie, zoals aangegeven door het achtervoegsel (x86) op de snelkoppelingen. Als u een 32-bits versie van Windows 10 gebruikt, hebt u slechts twee sneltoetsen. Deze items hebben niet het achtervoegsel (x86), maar zijn 32-bits versies. Als u een 64-bits besturingssysteem hebt, is het raadzaam om de 64-bits versie van PowerShell uit te voeren, tenzij u een specifieke reden hebt voor het uitvoeren van de 32-bits versie.

Zie Windows PowerShell starten voor meer informatie over het starten van PowerShell in andere versies van Windows.

Hoe kan ik PowerShell starten?

In de productieomgevingen die ik ondersteunt, gebruik ik drie verschillende Active Directory-gebruikersaccounts. Ik heb die accounts gespiegeld in de labomgeving die in dit boek wordt gebruikt. Ik meld me aan bij de Windows 10-computer als domeingebruiker die geen domeinbeheerder of lokale beheerder is.

Ik heb de PowerShell-console gestart door te klikken op de snelkoppeling Windows PowerShell, zoals weergegeven in afbeelding 1-1.

Afbeelding 1-4 - Titelbalk van het PowerShell-venster

U ziet dat op de titelbalk van de PowerShell-console 'Windows PowerShell' staat, zoals weergegeven in afbeelding 1-4. Sommige opdrachten worden prima uitgevoerd, maar PowerShell kan niet deelnemen aan Gebruikerstoegangsbeheer (UAC). Dit betekent dat het niet kan worden gevraagd om benodigde bevoegdheden voor taken waarvoor de goedkeuring van een beheerder is vereist. Het volgende foutbericht wordt gegenereerd:

Get-Service -Name W32Time | Stop-Service
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to the following
error: Cannot open W32Time service on computer '.'.
At line:1 char:29
+ Get-Service -Name W32Time | Stop-Service
+
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceController:ServiceController)
     [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

De oplossing voor dit probleem is het uitvoeren van PowerShell als domeingebruiker die een lokale beheerder is. Dit is hoe mijn tweede domeingebruikersaccount wordt geconfigureerd. Met behulp van het principe van minimale bevoegdheden mag dit account GEEN domeinbeheerder zijn of verhoogde bevoegdheden hebben in het domein.

Sluit PowerShell. Start de PowerShell-console opnieuw, met uitzondering van deze keer met de rechtermuisknop op de Windows PowerShell-snelkoppeling en selecteer Als administrator uitvoeren , zoals wordt weergegeven in afbeelding 1-5.

Afbeelding 1-5 - Contextmenu - Als administrator uitvoeren

Als u bent aangemeld bij Windows als normale gebruiker, wordt u gevraagd om referenties. Ik voer de referenties in voor mijn gebruikersaccount die een domeingebruiker en lokale beheerder is, zoals weergegeven in afbeelding 1-6.

Afbeelding 1-6

Zodra PowerShell opnieuw is gestart als beheerder, moet de titelbalk 'Beheer istrator: Windows PowerShell' zeggen, zoals wordt weergegeven in afbeelding 1-7.

Afbeelding 1-7

Nu PowerShell wordt uitgevoerd als lokale beheerder, is UAC geen probleem meer wanneer een opdracht wordt uitgevoerd op de lokale computer waarvoor normaal gesproken om benodigde bevoegdheden is vereist. Houd er echter rekening mee dat elke opdracht die wordt uitgevoerd vanaf dit verhoogde exemplaar van de PowerShell-console, ook verhoogde uitvoeringen uitvoert.

Ter vereenvoudiging van het vinden van PowerShell en het starten als beheerder, raad ik u aan deze vast te maken aan de taakbalk en deze in te stellen om automatisch te starten als beheerder telkens wanneer deze wordt uitgevoerd.

Zoek nogmaals naar PowerShell, behalve deze keer met de rechtermuisknop erop en selecteer 'Vastmaken aan taakbalk' zoals wordt weergegeven in afbeelding 1-8.

Afbeelding 1-8

Klik met de rechtermuisknop op de PowerShell-snelkoppeling die nu is vastgemaakt aan de taakbalk en selecteer eigenschappen zoals weergegeven in afbeelding 1-9.

Afbeelding 1-9 - Gebruikersaccountbeheer - Referenties invoeren

Klik op Geavanceerd, zoals aangegeven door #1 in afbeelding 1-10, schakel vervolgens het selectievakje Uitvoeren als administrator in, zoals aangegeven door #2 in afbeelding 1-10 en klik tweemaal op OK om de wijzigingen te accepteren en uit beide dialoogvensters af te sluiten.

Afbeelding 1-10 - Titelbalk met 'Beheer istrator'

U hoeft zich nooit zorgen te maken over het vinden van PowerShell of het al dan niet opnieuw als beheerder wordt uitgevoerd.

Als u PowerShell als beheerder uitvoert om te voorkomen dat problemen met UAC optreden, heeft dit alleen gevolgen voor opdrachten die worden uitgevoerd op de lokale computer. Het heeft geen effect op opdrachten die op externe computers zijn gericht.

Welke versie van PowerShell gebruik ik?

Er zijn een aantal automatische variabelen in PowerShell waarin statusgegevens worden opgeslagen. Een van deze variabelen is $PSVersionTable, dat een hashtabel bevat die kan worden gebruikt om de relevante PowerShell-versiegegevens weer te geven:

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Nieuwere versies van Windows PowerShell worden gedistribueerd als onderdeel van het Windows Management Framework (WMF). Afhankelijk van de WMF-versie is een specifieke versie van .NET Framework vereist. Zie Bestaande Windows PowerShell upgraden om een upgrade uit te voeren naar Windows PowerShell 5.1.

Uitvoeringsbeleid

In tegenstelling tot populaire overtuiging is het uitvoeringsbeleid in PowerShell geen beveiligingsgrens. Het is ontworpen om te voorkomen dat een gebruiker onbewust een script uitvoert. Een bepaalde gebruiker kan het uitvoeringsbeleid eenvoudig omzeilen in PowerShell. Tabel 1-2 toont het standaarduitvoeringsbeleid voor huidige Windows-besturingssystemen.

Windows-besturingssysteemversie Standaarduitvoeringsbeleid
Server 2019 Extern ondertekend
Server 2016 Extern ondertekend
Windows 10 Beperkt

Ongeacht de beleidsinstelling voor uitvoering, kan elke PowerShell-opdracht interactief worden uitgevoerd. Het uitvoeringsbeleid is alleen van invloed op opdrachten die worden uitgevoerd in een script. De Get-ExecutionPolicy cmdlet wordt gebruikt om te bepalen wat de huidige instelling voor het uitvoeringsbeleid is en de Set-ExecutionPolicy cmdlet wordt gebruikt om het uitvoeringsbeleid te wijzigen. Mijn aanbeveling is om het RemoteSigned-beleid te gebruiken, waarvoor gedownloade scripts moeten worden ondertekend door een vertrouwde uitgever om te kunnen worden uitgevoerd.

Controleer het huidige uitvoeringsbeleid:

Get-ExecutionPolicy
Restricted

PowerShell-scripts kunnen helemaal niet worden uitgevoerd wanneer het uitvoeringsbeleid is ingesteld op Beperkt. Dit is de standaardinstelling voor alle Windows-clientbesturingssystemen. Sla de volgende code op als een .ps1 bestand met de naam Stop-TimeService.ps1.

Tip

Een PowerShell-script is een bestand zonder opmaak met een .ps1 extensie die de opdrachten bevat die u wilt uitvoeren. Als u een PowerShell-script wilt maken, gebruikt u een code-editor zoals Visual Studio Code (VS Code) of een teksteditor zoals Kladblok.

Get-Service -Name W32Time | Stop-Service -PassThru

Deze opdracht wordt interactief uitgevoerd zonder fouten zolang PowerShell als beheerder wordt uitgevoerd. Maar zodra het is opgeslagen als een scriptbestand en u probeert het script uit te voeren, wordt er een fout gegenereerd:

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

U ziet dat de fout die in de vorige set met resultaten wordt weergegeven, precies aangeeft wat het probleem is (het uitvoeren van scripts is uitgeschakeld op dit systeem). Wanneer u een opdracht uitvoert in PowerShell waarmee een foutbericht wordt gegenereerd, moet u het foutbericht lezen in plaats van alleen de opdracht opnieuw uit te voeren en te hopen dat deze correct wordt uitgevoerd.

Wijzig het PowerShell-uitvoeringsbeleid in extern ondertekend.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
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 http://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

Lees de waarschuwing die wordt weergegeven bij het wijzigen van het uitvoeringsbeleid. Ik raad ook aan om het helponderwerp about_Execution_Policies te bekijken om ervoor te zorgen dat u weet wat de gevolgen zijn voor de beveiliging van het wijzigen van het uitvoeringsbeleid.

Nu het uitvoeringsbeleid is ingesteld op RemoteSigned, wordt het Stop-TimeService.ps1 script foutloos uitgevoerd.

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

Zorg ervoor dat u uw Windows Time-service start voordat u doorgaat, anders kunt u onvoorziene problemen ondervinden.

Start-Service -Name w32time

Samenvatting

In dit hoofdstuk hebt u geleerd hoe u PowerShell kunt vinden en starten en hoe u een snelkoppeling maakt waarmee PowerShell als beheerder wordt gestart. U hebt ook geleerd over het standaarduitvoeringsbeleid en hoe u dit kunt wijzigen.

Beoordelen

  1. Hoe bepaalt u welke PowerShell-versie een computer uitvoert?
  2. Waarom is het belangrijk om PowerShell als beheerder te starten?
  3. Hoe bepaalt u het huidige PowerShell-uitvoeringsbeleid?
  4. Wat voorkomt het standaard powerShell-uitvoeringsbeleid op Windows-clientcomputers?
  5. Hoe wijzigt u het PowerShell-uitvoeringsbeleid?

Voor degenen die meer informatie willen over de onderwerpen die in dit hoofdstuk worden behandeld, raad ik aan de volgende Help-onderwerpen voor PowerShell te lezen.

In het volgende hoofdstuk leert u meer over de detectie van opdrachten in PowerShell. Een van de dingen die worden behandeld, is het bijwerken van PowerShell, zodat deze Help-onderwerpen rechtstreeks vanuit PowerShell kunnen worden bekeken in plaats van ze op internet te moeten bekijken.