Microsoft PowerShell is een geweldig scriptingplatform. Microsoft biedt PowerShell-ondersteuning voor bijna alle Windows Server-rollen en -functies. U kunt PowerShell gebruiken om herhaalde taken te automatiseren, maar ook om eenvoudig taken uit te voeren via de commandoregel die u normaal gesproken uitvoert met de GUI tools. Als u bijvoorbeeld in een productieomgeving de patchingstatus op Windows servers moet controleren, is het gebruik van PowerShell scripting veel eenvoudiger dan verbinding te maken met elke server afzonderlijk en dan de patchingstatus te controleren. Ik ben een regelmatige gebruiker van PowerShell en heb duizenden PowerShell-scripts ontworpen in mijn 18 jaar IT-ervaring.
Vóór PowerShell was Visual Basic Scripting de primaire scripttaal om operationele Windows-taken uit te voeren. Hoewel Visual Basic Scripting nog steeds bestaat en veel IT-beheerders nog steeds de voorkeur geven aan VB-scripting, is het vermeldenswaard dat PowerShell de complexiteit van de code vermindert. Om bijvoorbeeld de services op een Windows-computer te controleren, moet u de VBScript-code in een kladblok schrijven, het bestand opslaan als .VBS en het dan uitvoeren met het CSCript-hostuitvoeringsbestand. Maar door PowerShell te gebruiken kunt u een eenvoudig Get-Service cmdlet gebruiken waarmee u snel een lijst van services op een Windows computer kunt maken. Als u de uitvoer met behulp van VB-script in een bestand wilt opslaan, moet u weer een heleboel code in het VB-script schrijven, waarbij het bestand wordt geopend en vervolgens de inhoud naar het bestand wordt geschreven. PowerShell vereist alleen niet dat je het bestand opent voordat de inhoud die door een PowerShell cmdlet wordt opgehaald naar een bestand kan worden geschreven. Het enige wat u hoeft te doen is “Export-CSV” of “Add-Content” cmdlets.
Cmdlets gebruiken: De bouwstenen van PowerShell-scripts
PowerShell biedt cmdlets (uitgesproken als “command-lets”), soms aangeduid als opdrachtregelhulpprogramma’s, die u kunt gebruiken om informatie te krijgen over het besturingssysteem, toepassingen die op een Windows-computer zijn geïnstalleerd, netwerkinformatie, de status van patches op Windows-computer, en nog veel meer. Het is belangrijk op te merken dat PowerShell cmdlets in .NET zijn geschreven en .NET classes gebruiken om de vereiste taken uit te voeren. Als u wilt weten welke PowerShell-cmdlets beschikbaar zijn op de lokale computer, voert u de volgende opdracht uit:
Get-Command
Get-Command is een PowerShell-cmdlet dat cmdlets, functies, filters en PowerShell-scripts ophaalt die zijn geïnstalleerd op de lokale computer. De bovenstaande opdracht vraagt alle PowerShell-modules op die op de lokale computer zijn geïnstalleerd. Als u alle opdrachten die op de lokale computer zijn geïnstalleerd in een volgorde wilt zien, voert u deze opdracht uit:
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
Drie soorten PowerShell-bewerkingen
Met PowerShell kunt u drie soorten bewerkingen uitvoeren. Dit zijn Get (Verkrijgen), Set (Instellen) en Remove (Verwijderen). PowerShell-cmdlet’s die beginnen met “Get” worden doorgaans gebruikt om informatie op te halen uit Windows-onderdelen. Bijvoorbeeld, Get-ADUser voert een lees operatie uit tegen de Active Directory database om de gebruikers informatie op te halen. Een paar voorbeelden van het gebruik van het Get-ADUser PowerShell cmdlet worden hieronder getoond:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com”
Het bovenstaande commando haalt alle gebruikersaccounts op die zich in een organisatie-eenheid bevinden, terwijl het onderstaande commando eigenschappen ophaalt die aan een enkele Active Directory gebruiker zijn gekoppeld:
Get-ADUser -Identity JohnThomas -Properties *
PowerShell cmdlets die beginnen met “Set” worden gebruikt om Windows component informatie te bewerken. Met Set-ADUser kunt u bijvoorbeeld verschillende operationele taken uitvoeren, zoals in de onderstaande opdrachten wordt getoond:
Set-ADUser -Identity JohnThomas -HomeFolder \Server1%UserName%
Met de onderstaande opdrachten worden mail-eigenschappen voor gebruiker JohnThomas ingesteld.
$ThisUser = Get-ADUser -Identity JohnThomas -Properties Mail
$ThisUser.Mail = [email protected]
Set-ADUser -Instance $ThisUser
Elke PowerShell cmdlets die beginnen met “Remove” worden gebruikt om verwijderingsoperaties uit te voeren. Remove-ADUser kan bijvoorbeeld worden gebruikt om een Active Directory-gebruiker te verwijderen, zoals hieronder wordt getoond:
Remove-ADUser -Identity JohnThomas
Combining PowerShell cmdlets
Een van de beste functies van PowerShell is de mogelijkheid om twee of meer PowerShell cmdlets te combineren in een enkele PowerShell opdracht. Dergelijke commando’s worden soms one-liner PowerShell-commando’s genoemd. Als u bijvoorbeeld alle uitgeschakelde gebruikersaccounts uit Active Directory wilt verwijderen, kunt u de PowerShell-cmdlets Search-ADAccount en Remove-ADUser combineren, zoals weergegeven in de onderstaande opdracht:
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq “User”} | Remove-ADUser
Zoals u in bovenstaand commando kunt zien, zoekt het Search-ADAccount PowerShell cmdlet in Active Directory naar uitgeschakelde accounts en door gebruik te maken van de pipe (|) operator geeft u de opdracht aan Remove-ADUser om alleen de gebruikers te verwijderen die door het Search-ADAccount commando zijn opgehaald.
PowerShell aliassen
Hoewel veel PowerShell cmdlets eenvoudig te lezen en te gebruiken zijn, biedt PowerShell ook een functie genaamd PowerShell alias. PowerShell is slim genoeg om de naam van een PowerShell cmdlet aan te vullen met een druk op de Tab toets. Indien u moeite heeft met het onthouden van de naam van de PowerShell cmdlets, kunt u PowerShell aliassen aanmaken. U kunt bijvoorbeeld een alias maken voor het PowerShell cmdlet Get-MailBoxStatistics met het onderstaande commando:
New-Alias ShowMB Get-MailBoxStatistics
Wanneer u in het PowerShell venster “ShowMB” typt, zoekt PowerShell naar het cmdlet dat is gekoppeld aan de ShowMB alias en voert deze vervolgens uit.
Opslaan van informatie in een CSV-bestand
Wanneer het gaat om het opslaan van informatie in een CSV-bestand, bespaart PowerShell een hoop scriptwerk. PowerShell biedt het cmdlet “Export-CSV” dat u kunt gebruiken met alle andere PowerShell cmdlets. Standaard toont elk PowerShell commando dat u uitvoert de resulterende informatie in het PowerShell commando venster tenzij u Export-CSV toevoegt aan het einde van het commando zoals in het commando hieronder:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com” |Export-CSV C:\Temp\AllUsersInAnOU.CSV
Merk op dat in het bovenstaande commando, u alleen “Export-CSV” toevoegt aan het einde van het commando om de uitvoer te exporteren in een CSV-bestand.
Zoals u ziet, verminderen PowerShell scripts de tijd die nodig is om dagelijkse operationele taken uit te voeren. PowerShell is in staat om drie operationele taken uit te voeren; Get, Set, en Remove en 97 procent van de PowerShell cmdlets beginnen met deze drie woorden om gemakkelijk de functie van een PowerShell cmdlet te identificeren. We hebben ook uitgelegd hoe eenvoudig het is om twee cmdlets te combineren in een enkel commando om uw PowerShell scripts efficiënter te maken.