De kern van de Powershell wordt gevormd door de zogenaamde Cmdlets. Dit zijn ingebouwde commando's die allen gebaseerd zijn op dezelfde .NET-klasse en dus ook over een basisset eigenschappen en functies beschikken. Bovendien is het mogelijk om zelf Cmdlets te schrijven en deze aan de Powershell toe te voegen. De naam van de commando's is over het algemeen zelfbeschrijvend gekozen en bestaat uit een werkwoord gevolgd door een zelfstandig naamwoord. Met het commando set-date
, is het dus bijvoorbeeld mogelijk om de huidige datum in te stellen, terwijl get-process
een lijstje met draaiende processen teruggeeft. Met de opdracht get-command
krijgt men een overzicht van de beschikbare Cmdlets.
PS> Get-Command
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path]Cmdlet Add-History Add-History [[-InputObject] ...
Cmdlet Add-Member Add-Member [-MemberType] <PS...
Cmdlet Add-PSSnapin Add-PSSnapin [-Name] <String...
Cmdlet Clear-Content Clear-Content [-Path]...
Cmdlet Get-Process Get-Process [[-Name]Cmdlet Get-PSDrive Get-PSDrive [[-Name] ...
Cmdlet Write-Progress Write-Progress [-Activity] <...
Cmdlet Write-Verbose Write-Verbose [-Message] <St...
Cmdlet Write-Warning Write-Warning [-Message] <St...
Deze opdracht is echter niet beperkt tot ingebouwde Cmdlets, maar kan ook informatie verschaffen over commando's die niet tot de Powershell behoren. Zo is het door gebruik te maken van de parameter *.com mogelijk een overzicht te krijgen van de commando's met .com-extensie. In dat geval krijgt men echter geen lijstje met de beschikbare parameters voor dit commando, omdat deze niet vanuit de Powershell bepaald kunnen worden, maar het volledige pad naar het bestand voorgeschoteld.

Zoals bij het gebruik van het commando Get-Commands
al duidelijk werd, is het mogelijk om parameters mee te geven met Cmdlets. Deze parameters worden voorafgegaan door een koppelteken en de naam van de parameter. Om bijvoorbeeld de gegevens van het proces explorer.exe op te vragen kan de parameter ProcessName als volgt gebruikt worden: Get-Process -ProcessName explorer
. Om typwerk te besparen is het echter niet nodig de volledige parameternaam te hanteren. Het volstaat de eerste karakters te gebruiken, zodoende dat er geen twijfel meer kan bestaan over welke parameter bedoeld wordt. In het eerder genoemde geval zijn er geen andere parameters die met de letter 'p' beginnen, dus zou Get-Process -p explorer
volstaan. Daarnaast zijn er ook Cmdlets die 'position sensitive' parameters hebben. Dit betekent dat de naam van de parameter helemaal weggelaten kan worden, zodat Get-Process explorer
volstaat.
PS> Get-Process -ProcessName explorer
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
574 20 26104 41596 140 232,92 540 explorer
PS> Get-Process -p explorer
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
574 20 26104 41596 140 232,95 540 explorer
PS> Get-Process explorer
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
574 20 26104 41596 140 232,95 540 explorer
Verder zijn er een aantal parameters die bij elke Cmdlet gebruikt kunnen worden, de zogenaamde 'Common Parameters'.
Parameter | Functie |
---|---|
Debug | Geeft meer informatie over de acties die ondernomen worden tijdens het uitvoeren van het commando. |
ErrorAction | Controleert het gedrag van het commando als er een fout optreedt. |
ErrorVariable | De naam van de variabele waarin objecten waarbij zich een fout voordoet moeten opgeslagen worden. |
OutVariable | Naam van de variabele waarin de uitvoer van het commando moet opgeslagen worden. Equivalent aan het pipen van de uitvoer door middel van | set-variable <naam> -passthru true. |
Confirm | Vraagt de gebruiker om bevestiging alvorens wijzigingen in het systeem aan te brengen. |
Verbose | Geeft gedetailleerde informatie over het verloop van het commando. |
WhatIf | Geeft informatie over aanpassingen die het commando zou uitvoeren, maar voert deze niet effectief uit. |

Naast het gebruik van de ingebouwde Cmdlets, is het dankzij de .NET-funderingen mogelijk om zelf Cmdlets te schrijven die vervolgens in de Powershell gebruikt kunnen worden. Een gedetailleerde omschrijving van de werkwijze hiervoor valt buiten het bestek van deze feature, maar programmeurs die aan de slag willen met .NET kunnen terecht op MSDN voor een uitleg over hoe Cmdlets te schrijven.

Om gebruikers van andere shells, als cmd.exe of bash, tegemoet te komen hebben de ontwikkelaars van de Powershell ervoor gezorgd dat er standaard reeds een aantal veelgebruikte aliassen voor bepaalde Cmdlets aanwezig zijn. Deze zitten overigens niet in de shell zelf ingebakken, maar worden gedefinieerd in een zogenaamd profile-bestand. Zo kunnen Bash-gebruikers er bijvoorbeeld voor opteren ls
in te typen, waarna achter de schermen eigenlijk Get-ChildItem
uitgevoerd wordt, wat resulteert in een lijstje met bestanden en subdirectories in de huidige map. Daarnaast is het mogelijk om met behulp van het commando set-alias
zelf een of meerdere aliassen voor een veelgebruikt commando te definiëren.
PS> set-alias plist get-process
PS> plist
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
105 5 1284 3592 33 0,08 3380 alg
93 4 3448 6620 43 1,73 484 BTTray
50 3 1804 2204 21 0,03 1572 btwdins
218 5 9328 13328 59 5,86 1600 CLCapSvc
89 34 8772 8280 47 12,77 1616 CLMLServer
...