Dit is een onderdeel van een doorlopende blogserie die is geschreven door Adam Gordon. Elke week zal Adam een PowerShell-commando met u doornemen en laten zien wanneer en hoe u elk commando kunt gebruiken. Deze week behandelt Adam Where-Object.
Wanneer Where-Object gebruiken
Het cmdlet Where-Object selecteert objecten met bepaalde eigenschapswaarden uit de verzameling objecten die eraan worden doorgegeven.
Met ingang van Windows PowerShell 3.0 zijn er twee verschillende manieren om een Where-Object-opdracht op te zetten.
- Scriptblok. U kunt een scriptblok gebruiken om de naam van de eigenschap, een vergelijkingsoperator en de waarde van de eigenschap op te geven. Where-Object geeft alle objecten waarvoor de scriptblok-instructie waar is.
- Vergelijkingsstatement. U kunt ook een vergelijking verklaring schrijven, die veel meer lijkt op natuurlijke taal.
Hoe te gebruiken Where-Object
Get gestopte services:
(1st) Get-Service | Where-Object {$_.Status -eq “Stopped”}
(2nd) Get-Service | where Status -eq “Stopped”
Deze commando’s krijgen een lijst van alle services die momenteel zijn gestopt.
De $_ automatische variabele vertegenwoordigt elk object dat wordt doorgegeven aan het Where-Object cmdlet.
De (1e) opdracht gebruikt de scriptblok-indeling, de (2e) opdracht gebruikt de vergelijkingsstatement-indeling.
Oproepen van processen op basis van werkset:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Deze opdrachten geven een lijst met processen die een werkset hebben die groter is dan 25.000 kilobytes (KB).
Omdat de waarde van de eigenschap WorkingSet in bytes wordt opgeslagen, wordt de waarde 25.000 met 1.024 vermenigvuldigd.
De scriptblok- en statement-syntaxis zijn equivalent en kunnen door elkaar worden gebruikt.
Gebruik het format van het vergelijkingsstatement:
(1st) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2nd) Get-Process | where Handles -GE 1000
Dit voorbeeld laat zien hoe het nieuwe vergelijkingsstatement-formaat van het cmdlet Where-Object kan worden gebruikt.
Het (1st) commando maakt gebruik van het vergelijkingsstatement-formaat. In dit commando worden geen aliassen gebruikt en alle parameters bevatten de parameternaam.
Het (2e) commando is het meer natuurlijke gebruik van het vergelijkingscommando formaat. De where alias wordt vervangen door de Where-Object cmdlet naam en alle optionele parameter namen worden weggelaten.
Gebruik meerdere voorwaarden:
Get-Module -ListAvailable | where {($_.Name -notlike “Microsoft*” -and $_.Name -notlike “PS*”) -and $_.HelpInfoUri}
De opdracht gebruikt de parameter -ListAvailable van het cmdlet Get-Module om alle modules op de computer op te halen.
Een pijplijnoperator (|) stuurt de modules naar het cmdlet Where-Object, dat modules ophaalt waarvan de namen niet beginnen met Microsoft of PS, en een waarde hebben voor de eigenschap HelpInfoURI, die PowerShell vertelt waar bijgewerkte helpbestanden voor de module te vinden zijn.
De vergelijkingsstatements worden verbonden door de logische operator And.
Het voorbeeld maakt gebruik van de scriptblok-opdrachtindeling.
NOTE: Logische operatoren, zoals And en Or, zijn alleen geldig in scriptblokken. U kunt ze niet gebruiken in het vergelijkingsstatement van een Where-Object-opdracht.
Leer de opdracht van vorige week: Get-WinEvent.
Heb je PowerShell-training nodig? Bekijk de online IT-trainingscursussen PowerShell van ITProTV.