Ik heb in mijn script folder een bestandje sniplets.txt staan, een documentje waarin ik korte, handige comando's verzamel. Een soort truckendoosje dus. In deze blog wil ik er eens doorheen bladeren, kijken of er wat leuks over te vertellen is.

Get-Content

Het Get-Content commando haalt de inhoud uit een (tekst)bestand. Dit kun je dan weer gebruiken in vele andere hoedanigheden.
Bijvoorbeeld:
Get-Content .\sniplets.txt | Select-String "content"

zoekt in het bestand sniplets.txt naar de tekst "content". Dit werkt ook andersom, bijvoorbeeld als je grofweg alle commentaar regels wilt filteren:
Get-Content .\sniplets.txt | Select-String -not "#"

(Ik zeg grofweg, omdat op deze manier alle regels met een # erin gefilterd worden, dat is niet optimaal.)

Ook handig is de combinatie measure object:
Get-Content .\sniplets.txt | Measure-Object

Hiermee kun je zien hoeveel regels in het bestand zitten. En dat is handig. Zeker als verificatiestap na een opschoonactie als deze combinatie, waarbij met Sort-Object -Unique de inhoud gesorteerd en de-dupliceerd wordt:
Get-Content .\sample2.csv | Sort-Object -Unique | Out-File sorted.csv

NB: Voor werken met CSV bestanden is Import-Csv het power commando. Maar dat is voor een andere keer...

Get-WMIObject

Oei, deze is GROOT... Get-WMIObject maakt gebruik van WMI (waar je zo meerdere blogs over kunt vullen), om informatie over de Windows omgeving binnen te halen. Voor meer info over WMI hier te vinden(externe link)

Voor het inspecteren van processen:
Get-WMIObject -Class Win32_Process

Met deze WMI uitvraag kun je erg veel zien over de actieve processen, inclusief de gebruikte parameters bij het opstarten.
Bijvoorbeeld:
$ALL = Get-WMIObject -Class Win32_Process
foreach ($proc in $ALL) {
  Write-Host $proc.name " - " $proc.CommandLine
}

Nog een mooie:
Get-WMIObject -Class Win32_Product

Met deze WMI uitvraag kun je kijken welke producten op de computer geïnstalleerd zijn.

Een totaal overzicht van de beschikbare classes kun je krijgen met:
Get-WMIObject -list Win32_*

Om het nog mooier te maken: Met het commando Test-WSMan kun je kijken of een andere computer op het netwerk ook WinRM heeft draaien. Als dat zo is, dan kun je met WMI informatie van de andere machine binnen te halen...
Test-WsMan <COMPUTER>
Invoke-Command -ComputerName <COMPUTER> -ScriptBlock { Get-WMIObject -Class Win32_Product |Out-File "\\netshare\name\software-COMP.txt" } -credential $Env:USERNAME

Op mijn computer staat het gelukkig uit :)

Harm ter Veer