10 handige powershell-commando's

Ingediend door Dirk Hornstra op 31-mar-2025 22:24

Mijn eerste computer was een 8086, MS-DOS 6.2 Je had (dus) alleen een console waar je commando's in moest typen. We hadden Informatica op school, dus je wist dat je dingen met DIR, CD en MKDIR kon doen. We leven nu met zijn allen in "grafische interfaces", op je Mac, Linux (Ubuntu of andere variant) of Windows. Toch ga ik nog wel graag eens naar een terminal om acties uit te voeren.

Op windows doe je dat via het uitvoeren van cmd.exe, daarmee start je de "DOS interface" zoals je die vroeger had. Maar dat gebruik ik steeds minder. Steeds vaker zit ik namelijk in de Powershell-interface. Powershell kan namelijk functies van .NET uitvoeren. Je kunt er "heel veel" mee. En voor het uitvoeren van taken, scripten van die taken kun je een [bestand].ps1 bestand aanmaken en dat uitvoeren. Als ik een repository uitgecheckt heb, kan ik in de terminial zien in welke branch ik zit en of zaken "up-to-date" zijn of dat ik zaken moet committen en pushen.

Via Techrepublic kwam ik op een pagina waar "10 handige powershell-commando's" stonden. Ik ben ze even doorgelopen en ja, ik  denk dat ik een aantal misschien in de toekomst nog wel eens nodig ga hebben/ga gebruiken. Dus ik deel ze ook even met jullie, sharing=caring :)

 

Het origineel staat op deze pagina.  Mocht de pagina "ooit" niet meer beschikbaar zijn, de samenvatting van de tips.

1. Toon alle USB-apparaten

PowerShell kan werken met Windows Management Instrumentation. In PowerShell kun je WMI aanroepen om alle USB-devices op te vragen (in je eigen computer of op een extern systeem):



gwmi Win32_USBControllerDevice -computername [NAME SERVER] |fl Antecedent,Dependent

// startte niet op mijn pc, ik moest Powershell als administrator runnen. Tevens is dit het commando om het op je "eigen computer" uit te voeren:
gwmi Win32_USBControllerDevice -computername localhost |fl Antecedent,Dependent
 

 

2. Start powershell op

Niet een heel interessante "tip", uitleg dat je powershell start door via Windows-Run powershell in te typen en te starten.

 

3. Stop dat proces via PowerShell in plaats van via de Task Manager

 

Heb je een vastgelopen proces in Windows en je kunt het niet via Task Manager stoppen, probeer het met Powershell. We proberen hier notepad.exe die is blijven hangen bij het openen van een 8GB XML-bestand af te sluiten:



get-process notepad*


// Je krijgt dan iets als dit:
// Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
// ------- ------ ----- ----- ----- ------ -- -----------
// 28 4 -210844 -201128 -163 25.67 2792 Notepad

// Met het Process ID kun je het proces stoppen:

stop-process -id 2792
// stopt niet? use the Force! - voorzichtig, kan het systeem corrupt maken als het een draaiend proces is, dus gebruik met-mate
stop-process -id 2792 -Force

 

4. Met PSDrive kun je meer doen dan alleen schijven bekijken

Je zit met Powershell in een terminal en dan heb je het "DOS-gevoel", blader door mappen en bestanden. Maar dankzij PSDrive kun je meer.

The PSDrive command lets you view objects of the Windows environment beyond traditional network, local, or removable drives. One popular view is the HKLM PSDrive, which allows you to view the HKEY_LOCAL_MACHINE top-level hive of the registry. To get into the registry, enter the following command:


psdrive


// je ziet hier wat je kunt: je filesysteem dus C:, maar ook door je registry

cd HKLM:

// hiermee zit je in het register in HKEY_LOCAL_MACHINE
// je kunt met ls, cd en rm zaken tonen, naar submappen gaan en ook items verwijderen (be carefull!)

cd c:\

// met dit commando ga je weer terug naar je filesysteem en ben je weer "uit" het register

overige voorbeelden:

cd Cert:
// ga naar je certificaten

cd Env:
// bekijk je systeem-/omgevingsvariabelen
 


5. Exporteer je NTFS rechten op mappen, recursive (dus ook onderliggende mappen) of juist niet
 


Get-Acl C:\


// hiermee krijg je een basisoverzicht qua rechten

Get-Acl C:\ | Select -Expand Access

// geeft je meer details wie welke rechten heeft

Get-ChildItem C:\ -recurse | Get-Acl

// hiermee vraag je alle submappen op van je C-schijf, niet heel handig. Beperk je acties tot niet al te grote/diepe mappen.

Get-Acl C:\ | export-csv c:\filename.csv

// exporteren naar CSV

Get-Acl C:\ | Select -Expand Access > c:\filename.txt

// exporteren naar tekstbestand

 

6. Langdurige taak? Verplaats m naar de achtergrond.

Er zit een fout in deze pagina. Er wordt gesproken over get-psjob, start-psjob en remove-psjob. De juiste syntax is zonder ps, dus de juiste syntax is:



 start-job -scriptblock { Get-Process -Name pwsh }
// hiermee start je een achtergrond-taak

 

get-job
// je ziet de achtergrond taak/taken
// Id    Name ...
// ---------------
// 1      Job1

remove-job 1
// hiermee verwijder/stop je de achtergrondtaak

 

7. Zet een timestamp in je output

 

Hoe lang heeft die taak gedraaid? Uhm... geen idee... Door een timstamp in de output te zetten kun je wel zien hoelang elke stap duurt.



Write-Host $(Get-Date -format g) Start logging   
// korte notatie


Write-Host $(Get-Date -format F) Start logging   
// lange notatie

Write-Host $(Get-Date -format o) Start logging   
// notatie met millisecondes en de UTC-offset

 

8. Kunnen we verbinden met het internet?

Is die site bereikbaar? Met Test-Connection kun je het valideren. Volgens de site ook met -Port, maar ik zie alleen -TcpPort als parameter. Tip, als je in de terminal een - intypt en daarna op Tab, dan kun je door alle mogelijke parameters heen scrollen.



Test-Connection -ComputerName techblog.dirkhornstra.nl
// doet 4x een ping


Test-Connection -ComputerName techblog.dirkhornstra.nl -TcpPort 80
// response; true (of false indien niet bereikbaar)
 


9. Vraag een hash op van een bestand.

Soms wil je valideren of een bestand wat je gedownload hebt (of zelf online beschikbaar gaat stellen) wel het echte bestand is. Dat kan met het berekenen van een HASH-waarde.

Je kunt daar certutil. voor gebruiken, zoals ik eerder in dit artikel beschreven heb. Maar Powershell kan het dus ook!



Get-FileHash -Path “N:\Data\Report.txt” -Algorithm SHA1
//  bovenstaande is expliciet voor SHA1, als je het algoritme niet als parameter mee geeft is SHA256 de standaard.

 

 

10. Stop even die scrollende output, lees wat er staat en ga door!

Als je veel output naar het scherm stuurt, is soms niet te lezen wat er allemaal op je scherm staat. Tijd om een soort "tijdelijke pauze" toe te voegen.



function EasyView { process { $_; Start-Sleep -seconds .5}}

Get-ChildItem C:\ | EasyView

// dit werkt inderdaad super!