Detta är en del av en pågående bloggserie skriven av Adam Gordon. Varje vecka kommer Adam att gå igenom ett PowerShell-kommando och visa dig när och hur du ska använda varje kommando. Den här veckan tar Adam upp Where-Object.
När du ska använda Where-Object
Cmdletten Where-Object väljer objekt som har särskilda egenskapsvärden från samlingen av objekt som skickas till den.
Från och med Windows PowerShell 3.0 finns det två olika sätt att konstruera ett Where-Object-kommando.
- Skriptblock. Du kan använda ett skriptblock för att ange egenskapsnamnet, en jämförelseoperatör och egenskapsvärdet. Where-Object returnerar alla objekt för vilka skriptblocksangivelsen är sann.
- Jämförelseangivelse. Du kan också skriva ett jämförelseuttalande, vilket är mycket mer likt naturligt språk.
Hur du använder Where-Object
Hämta stoppade tjänster:
(1st) Get-Service | Where-Object {$_.Status -eq ”Stopped”}
(2nd) Get-Service | where Status -eq ”Stopped”
Dessa kommandon hämtar en lista över alla tjänster som för närvarande är stoppade.
Den automatiska variabeln $_ representerar varje objekt som skickas till cmdlet Where-Object.
Det (1:a) kommandot använder formatet skriptblock, det (2:a) kommandot använder formatet jämförelseanvisning.
Hämta processer baserat på arbetsuppsättning:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Dessa kommandon listar processer som har en arbetsmängd som är större än 25 000 kilobyte (KB).
Då värdet för egenskapen WorkingSet lagras i byte multipliceras värdet 25 000 med 1024.
Skriptblocket och syntaxen för uttalanden är likvärdiga och kan användas omväxlande.
Använd formatet för jämförelseuttalanden:
(1st) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2nd) Get-Process | where Handles -GE 1000
Det här exemplet visar hur du använder det nya formatet för jämförelsedeklarationer för cmdlet Where-Object.
I kommandot (1st) används formatet för jämförelsedeklarationer. I det här kommandot används inga alias och alla parametrar innehåller parameternamnet.
Det (2:a) kommandot är den mer naturliga användningen av formatet för jämförelsekommandot. Aliaset where ersätts med namnet på cmdlet Where-Object och alla valfria parameternamn utelämnas.
Använd flera villkor:
Get-Module -ListAvailable | where {($_.Name -notlike ”Microsoft*” -and $_.Name -notlike ”PS*”) -and $_.HelpInfoUri}
Kommandot använder parametern -ListAvailable i cmdlet Get-Module för att hämta alla moduler på datorn.
En pipelineoperatör (|) skickar modulerna till cmdlet Where-Object, som hämtar moduler vars namn inte börjar med Microsoft eller PS och som har ett värde för egenskapen HelpInfoURI, som talar om för PowerShell var de ska hitta uppdaterade hjälpfiler för modulen.
Varje jämförelseanvisningar är sammankopplade med den logiska operatorn And.
I exemplet används kommandoblockets format.
OBSERVERA: Logiska operatörer, som And och Or, är endast giltiga i skriptblock. Du kan inte använda dem i formatet jämförelseanvisning för ett Where-Object-kommando.
Lär dig förra veckans kommando:
Behövs PowerShell-utbildning? Kolla in ITProTV:s PowerShell-utbildningar för IT online.