Dette er en del af en igangværende blogserie skrevet af Adam Gordon. Hver uge vil Adam føre dig gennem en PowerShell-kommando og vise dig, hvornår og hvordan du skal bruge hver kommando. I denne uge dækker Adam Where-Object.
Hvornår skal du bruge Where-Object
Cmdletten Where-Object vælger objekter, der har bestemte egenskabsværdier, fra den samling af objekter, der er overgivet til den.
Der er to forskellige måder at opbygge en Where-Object-kommando på fra Windows PowerShell 3.0.
- Scriptblok. Du kan bruge en scriptblok til at angive egenskabsnavnet, en sammenligningsoperator og egenskabsværdien. Where-Object returnerer alle objekter, for hvilke scriptblokanvisningen er sand.
- Sammenligningsanvisning. Du kan også skrive en sammenligningsangivelse, som minder meget mere om naturligt sprog.
Sådan bruger du Where-Object
Hent stoppede tjenester:
(1.) Hent-tjeneste | Where-Object {$_.Status -eq “Stopped”}
(2.) Hent-tjeneste | where Status -eq “Stopped”
Disse kommandoer får en liste over alle de tjenester, der i øjeblikket er stoppet.
Den automatiske variabel $_ repræsenterer hvert objekt, der overføres til cmdletten Where-Object.
Den (1.) kommando bruger scriptblokformatet, den (2.) kommando bruger formatet med sammenligningsangivelse.
Hent processer baseret på arbejdssæt:
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Disse kommandoer viser en liste over processer, der har et arbejdssæt på mere end 25.000 kilobyte (KB).
Da værdien af WorkingSet-egenskaben er gemt i bytes, ganges værdien 25.000 med 1.024.
Scriptblokken og syntaksen for erklæringen er ækvivalente og kan bruges i flæng.
Brug formatet for sammenligningserklæringen:
(1.) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2.) Get-Process | where Handles -GE 1000
Dette eksempel viser, hvordan du bruger det nye format for sammenligningsanvisninger i cmdletten Where-Object.
Den (1.) kommando bruger sammenligningsanvisningsformatet. I denne kommando bruges der ingen aliaser, og alle parametre indeholder parameternavnet.
Den (2.) kommando er den mere naturlige brug af sammenligningsordreformatet. Aliaset where erstattes af navnet på cmdletten Where-Object, og alle valgfrie parameternavne udelades.
Brug flere betingelser:
Get-Module -ListAvailable | where {($_.Name -notlike “Microsoft*” -and $_.Name -notlike “PS*”) -and $_.HelpInfoUri}
Kommandoen bruger parameteren -ListAvailable i cmdletten Get-Module til at hente alle moduler på computeren.
En pipelineoperatør (|) sender modulerne til cmdletten Where-Object, som henter moduler, hvis navne ikke begynder med Microsoft eller PS, og som har en værdi for egenskaben HelpInfoURI, der fortæller PowerShell, hvor de skal finde opdaterede hjælpefiler for modulet.
Sammenligningsangivelserne er forbundet med den logiske operatør And.
Eksemplet anvender kommando-formatet scriptblok.
BEMÆRK: Logiske operatorer, f.eks. And og Or, er kun gyldige i scriptblokke. Du kan ikke bruge dem i sammenligningsanvisningsformatet i en Where-Object-kommando.
Lær kommandoen fra sidste uge:
Har du brug for PowerShell-uddannelse? Tjek ITProTV’s PowerShell online it-uddannelseskurser.