Wat is Windows PowerShell?

Windows PowerShell is een objectgeoriënteerde automatiseringsengine en scripttaal met een interactieve command-line shell die Microsoft heeft ontwikkeld om IT-professionals te helpen bij het configureren van systemen en het automatiseren van administratieve taken.

Windows PowerShell, gebouwd op het .NET-framework, werkt met objecten, terwijl de meeste command-line shells gebaseerd zijn op tekst. Windows PowerShell dient als een automatiseringshulpmiddel voor systeembeheerders, zowel voor IT-afdelingen als voor externe entiteiten, zoals managed service providers, vanwege de scripting mogelijkheden.

PowerShell is ontstaan als een fatsoenlijk aanbod dat alleen beschikbaar was op Windows. In 2016 heeft Microsoft PowerShell beschikbaar gesteld op Linux en macOS.

Wat doet Windows PowerShell?

Microsoft ontwierp Windows PowerShell om systeemtaken te automatiseren, zoals batchverwerking, en om systeembeheertools te maken voor veelgebruikte processen. De PowerShell-taal, vergelijkbaar met Perl, biedt verschillende manieren om taken te automatiseren:

  • met cmdlets, dat zijn zeer kleine .NET-klassen die als systeemcommando’s verschijnen;
  • met scripts, die combinaties zijn van cmdlets en bijbehorende logica;
  • met uitvoerbare bestanden, die standalone tools zijn; en
  • met de instantiatie van standaard .NET-klassen.

Beheerders kunnen met PowerShell een breed scala aan activiteiten uitvoeren. Het kan informatie over besturingssystemen extraheren, zoals de specifieke versie- en servicepackniveaus. “PowerShell-aanbieders” zijn programma’s die gegevens in gespecialiseerde dataopslagplaatsen toegankelijk maken op de commandoregel. Deze dataopslagplaatsen zijn onder andere systeemschijven en Windows-registers.

Windows PowerShell dient ook als vervanging voor de Command Prompt van Microsoft, die teruggaat tot DOS. Microsoft heeft bijvoorbeeld van PowerShell de standaard opdrachtregelinterface (CLI) voor Windows 10 gemaakt vanaf build 14791. De rol van Windows PowerShell als command-line shell is hoe de meeste gebruikers kennis maken met de technologie.

Belangrijkste PowerShell functies

Microsoft bevat updates en nieuwe functies bij elke PowerShell-versie, maar hier is een lijst van de primaire functies en kenmerken.

Zoekmogelijkheden. Gebruikers kunnen de functies van PowerShell ontdekken met behulp van cmdlets zoals Get-Command, dat een lijst maakt van alle commando’s, inclusief cmdlets en functies, die beschikbaar zijn op een bepaalde computer. Parameters kunnen worden gebruikt om de reikwijdte van de zoekopdracht te beperken.

Help mogelijkheden. Gebruikers kunnen meer leren over PowerShell principes en bepaalde onderdelen zoals cmdlets via het Get-Help cmdlet. De -online-parameter biedt toegang tot help-artikelen op het web, indien beschikbaar voor een bepaald onderwerp.

Commando’s op afstand. Beheerders kunnen op één of meerdere computers op afstand bewerkingen uitvoeren, waarbij ze gebruik maken van technologieën zoals Windows Management Instrumentation en WS-Management. Met het WS-Managementprotocol kunnen gebruikers bijvoorbeeld PowerShell-opdrachten en scripts uitvoeren op externe computers.

Pipelining. Met PowerShell kunnen commando’s via de pipe operator aan elkaar worden gekoppeld, gesymboliseerd als |. Deze benadering laat de uitvoer van een bepaald commando de input worden voor het volgende commando in de pijplijnvolgorde. De PowerShell-pijplijn laat objecten, in plaats van tekststrings, van het ene naar het andere cmdlet stromen.

Details over extra functies vindt u in de volgende secties.

Desired State Configuration (DSC)

Met PowerShell 4.0 introduceerde Microsoft een configuratiebeheerplatform genaamd Desired State Configuration (DSC), waarmee beheerders een specifieke configuratie voor een server kunnen instellen. Nadat de beheerder de serverinstellingen heeft gedefinieerd, zorgt PowerShell ervoor dat de doelknooppunten de gewenste status behouden. DSC heeft twee werkingsmodi: push-modus en pull-modus.

Powershell DSC

In push-modus stuurt een server meldingen naar de nodes. Het is een eenrichtingscommunicatie, waarbij de beheerder notificaties verstuurt vanaf een werkstation. De installatiekosten zijn minder omdat het beheer vanaf een apparaat wordt uitgevoerd, maar een melding gaat verloren als het apparaat niet op het netwerk is aangesloten.

In push-modus maakt de IT-afdeling een pullserver aan met de configuratiegegevens van elk knooppunt met behulp van een MOF-bestand. Elke node neemt contact op met de pullserver om te controleren of er een nieuwe configuratie is. Als de nieuwe configuratie beschikbaar is, stuurt de pullserver de configuratie naar het knooppunt. Beheerders kunnen alle apparaten beheren, ongeacht hun netwerkverbinding. Als een apparaat verbinding maakt met het netwerk, neemt het automatisch contact op met de pullserver om te controleren of er een nieuwe configuratie is.

DSC-Bronnen

DSC-bronnen zijn de onderdelen van een configuratiescript. Beheerders kunnen de beschikbare DSC-resources op een machine controleren met het commando Get-DscResource.

Beheerders gebruiken deze resources om componenten zoals registersleutels en Windows-services te configureren of om lokale gebruikers aan te maken en te beheren via een configuratiescript. De File resource beheert bijvoorbeeld bestanden en mappen, de Environment resource beheert omgevingsvariabelen en de Registry resource beheert de registersleutels van een node.

PowerShelle geïntegreerde scriptomgeving

PowerShell Integrated Scripting Environment (ISE), geïntroduceerd door Microsoft in PowerShell versie 2.0, is een PowerShell host applicatie die gebruikt wordt om scripts te schrijven, te testen en te debuggen of om commando’s te schrijven in een grafische gebruikersinterface van Windows (GUI).

PowerShell ISE wordt geleverd met meerdere functies, zoals syntax-kleuren, multiline-bewerking, contextgevoelige hulp en het invullen van tabbladen.

PowerShell scriptomgeving

PowerShell ISE heeft geavanceerde functies die bekend zijn bij Windows gebruikers. Zo kan een gebruiker bijvoorbeeld een gedeelte van een PowerShell-opdracht markeren en kopiëren met een muis of met de sneltoetscombinatie Shift + Arrow. De gebruiker kan de inhoud ook overal in het venster van de editor plakken.

Een andere handige functie is de mogelijkheid om verschillende versies van een opdracht in de editor te bewaren en opdrachten die u nodig hebt in de PowerShell ISE uit te voeren.

De F5 toets start een commando direct vanuit de editor. Om een bepaalde regel uit te voeren, selecteert u deze en drukt u op F8. De contextgevoelige hulp geeft overeenkomende cmdlets weer wanneer de gebruiker een commando begint in te voeren. Een commando add-on toont een lijst met te selecteren cmdlets.

Windows PowerShell ISE biedt tabbladen om te kunnen werken aan meerdere administratieve taken. Met PowerShell ISE kan snel worden overgeschakeld van de CLI naar de scriptmodus.

PowerShell modules

Met Windows PowerShell modules kunnen beheerders een script hergebruiken om een taak te automatiseren. Een PowerShell module kan worden gedefinieerd als een set PowerShell-functies die zijn gegroepeerd om alle aspecten van een bepaald gebied te beheren. PowerShell-modules stellen beheerders in staat om code te verwijzen, laden, door te gaan en te delen. De eenvoudigste manier om een Windows PowerShell module te maken is om het script op te slaan als een PSM1-bestand.

Een PowerShell module bevat vier essentiële elementen:

  • een PSM-bestand, dat is de module;
  • hulpbestanden of scripts die de module nodig heeft;
  • een manifeste bestand dat de module beschrijft; en
  • een directory die de inhoud opslaat.

Een PowerShell-module kan een van de vier types zijn:

  • Scriptmodule: Een PSM1-bestand dat verschillende functies bevat om beheerders in staat te stellen import-, export- en beheersfuncties uit te voeren.
  • Binaire module: Een .NET framework assembly (DLL-bestand) die gecompileerde code bevat. Ontwikkelaars gebruiken meestal een binaire module om cmdlets te maken met krachtige functies die niet gemakkelijk met een PowerShell-script kunnen worden uitgevoerd.
  • Manifest module: Een manifest module is een module (PSM1) bestand met een bijbehorend PSD1 bestand (manifest).
  • Dynamische module: Een dynamische module wordt op verzoek dynamisch aangemaakt door een script. Het wordt niet opgeslagen of geladen naar permanente opslag.

Windows PowerShell functies

Een Windows PowerShell-functie is vergelijkbaar met een PowerShell cmdlet, met een aantal kleine verschillen. Cmdlets worden geschreven in een gecompileerde .NET-taal, zoals C#, terwijl functies in PowerShell worden geschreven en niet worden gecompileerd.

Voor ontwikkelaars en onafhankelijke softwareleveranciers is het makkelijker om een PowerShell cmdlet te verpakken en te implementeren in vergelijking met verpakkingsbibliotheken van functies. Cmdlets en geavanceerde functies ondersteunen krachtige parameter bindingen.

Door een parameter te beschrijven aan de shell, kunnen admins elk type PowerShell-parameters gebruiken, zoals named parameters, verplichte parameters en positionele PowerShell-parameters.

Een voorbeeld van een PowerShell functie is:

function Set-Something {
  [CmdletBinding()]
  param (
    [Parameter()]
    [string]$Thing
  )

  Write-Host $Thing
}
Een functie bevat een of meer optieparameters binnen een parameter blok en body.

Taalconstructies

Als scripttaal biedt Windows PowerShell verschillende taalconstructies die de stroom van scripts controleren, terwijl ze beslissingen nemen over wat er gedaan moet worden. Sommige van de taalconstructies omvatten voorwaarden, switches, loops en variabelen.

Condities. Het taalconstruct als het wordt gebruikt om een voorwaardelijke expressie te evalueren. Als de voorwaardelijke expressie waar is, wordt een scriptblok uitgevoerd.

if ($i -eq 1)
{
  ## Doe iets
}
else
{
  ## Do iets anders
}
Switch. Het switch teken wordt gebruikt wanneer er een lange lijst van voorwaardelijke verklaringen is om te testen. Switch wordt vaak gebruikt in plaats van veel if/then/else-constructies.
switch ($i) {
  0
  {
    Write-Host "I is 0"
  }
  1
  {
    Write-Host "I is 0"
  }
  Default
  {
    Write-Host "I is niet 0 of 1"
  }
}
Loops. Het while-statement herhaalt de code zolang de volgende voorwaardelijke uitdrukking waar is:
while ($i -eq 0) {
  ## Do iets
}

De do-loop is vergelijkbaar met de while-loop. Het enige verschil is dat PowerShell de do-loop aan het einde van de loop uitvoert.

do {
  ## do iets
} while ($i -lt 0)

Wanneer u een foreach loop gebruikt, herhaalt PowerShell de code voor elk item dat in het script wordt vermeld.

$array = ('item1','item2','item3')
foreach ($item in $array) {
  $item
}

Gebruik een for loop om uit te voeren totdat aan een voorwaarde is voldaan.

for ($i = 0; $i -lt 5; $i++)
{
  $i
}

Variabelen

Variabelen slaan gegevens op, maar Windows PowerShell variabelen zijn krachtiger omdat ze kunnen worden toegewezen aan onderliggende klassen in het .NET-raamwerk. PowerShell behandelt variabelen als .NET-objecten, wat betekent dat ze gegevens kunnen opslaan en op meerdere manieren kunnen manipuleren.

Namen van variabelen in PowerShell beginnen met een dollarteken en bevatten een mix van cijfers, letters, symbolen en spaties. Bijvoorbeeld, $var=”HALLO” slaat de string HALLO op in de $var variabele. Variabelen kunnen ook verschillende scopes hebben, zoals global, local, script, privé en genummerde scopes.

Arrays

Een PowerShell-array is een component die het mogelijk maakt om meer dan één item in een variabele of een veld op te slaan. Om bijvoorbeeld meerdere waarden aan een variabele toe te wijzen, gebruikt u het volgende script:

$a=1,2,3

PowerShell behandelt elk item in een array als een apart element. Om elk item in een array aan te pakken, biedt PowerShell index nummers aan. Het eerste element in de array wordt standaard als 0 geïndexeerd. Het grootste voordeel van PowerShell is dat het automatisch array inserties afhandelt, zodat arrays niet handmatig vernietigd of aangemaakt hoeven te worden bij het toevoegen of verwijderen van elementen.

Hash tabellen

Hash-tabellen zijn datastructuren die vergelijkbaar zijn met arrays. Een PowerShell-array slaat meerdere afzonderlijke items op, maar met een hashtabel wordt elk item of elke waarde opgeslagen met behulp van een sleutel of een waarde. Een array kan niet meerdere waarden onder elk element opslaan, terwijl een hash-tabel dat wel kan. Hieronder staat een voorbeeld van het vergelijken van een array met een hash-tabel:
$array = @('Jan','Susan','Donnie')
$hashtable = @{FirstName = 'Jan'; FirstName = 'Susan'; FirstName = 'Donnie'}

Hulp en commentaar

Windows PowerShell maakt het mogelijk om hulponderwerpen voor modules, scripts en individuele opdrachten toe te voegen. Om alle helponderwerpen te bekijken, gebruikt u het Get-Help-commando.

Bij het importeren van een module in een sessie importeert PowerShell automatisch de helponderwerpen voor die module. Als er geen helponderwerpen voor een module zijn, geeft het Get-Help-commando de automatisch gegenereerde help weer. Er bestaan drie soorten helpinhoud in PowerShell: comment-based help, externe help en updatebare help.

Commentaar gebaseerde help verwijst naar opmerkingen die bij een script of commando zijn gevoegd om Get-Help te kunnen lezen. Externe hulp stelt de auteur in staat om hulpinhoud te definiëren in een extern XML-bestand dat in XAML is geschreven. De updatebare help maakt gebruik van externe hulp, maar stelt gebruikers in staat om de nieuwste helpinhoud te downloaden met het commando Update-Help.

Uitvoerbare programma’s

PowerShell is ook een cmd.exe vervanger die een uitvoerbaar programma op meerdere manieren uitvoert via het Startproces commando, de ampersand en het Invoke-Expression commando. Met ping.exe als voorbeeld, is hier te zien hoe een gebruiker het uitvoerbare programma met PowerShell kan uitvoeren:

Start-Process -FilePath 'ping.exe' -ArgumentList 'google.com' -Wait -NoNewWindow
& 'ping.exe' google.com
ping google.com
Invoke-Expression -Command 'ping.exe google.com'