about_Simplified_Syntax
Kort beskrivning
Beskriver enklare, mer naturliga sätt att skriptfilter för samlingar av objekt.
Lång beskrivning
Med förenklad syntax, som introducerades i Windows PowerShell 3.0, kan du skapa vissa filterkommandon utan att använda skriptblock. Den förenklade syntaxen liknar naturligt språk och är främst användbar med samlingar av objekt som skickas till kommandon Where-Object
och ForEach-Object
eller deras motsvarande alias where
och foreach
.
Du kan använda en metod för medlemmarna i en samling (oftast en matris) utan att referera till den automatiska variabeln $_
i ett skriptblock.
Tänk på följande två anrop:
Standardsyntax
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -FilterScript { $_.FriendlyName -eq 'Verisign' }
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -FilterScript { $_.GetKeyAlgorithm() }
Kommentar
I det andra kommandot GetKeyAlgorithm
anropas metoden för varje objekt i samlingen. Om objektet som tas emot från pipelinen inte har någon GetKeyAlgorithm
metod genererar kommandot ett fel.
Förenklad syntax
Under den förenklade syntaxen implementeras jämförelseoperatorer som arbetar med objektmedlemmar i en samling som parametrar. Du kan också anropa en metod för objekt i en samling utan att referera till den automatiska variabeln $_
i ett skriptblock. Jämför följande två anrop med standardsyntaxexemplen:
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -Property FriendlyName -EQ 'Verisign'
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -MemberName GetKeyAlgorithm
Eftersom parametrarna Property och MemberName är positionella kan du utelämna dem från kommandot. Med hjälp av alias kan du förenkla kommandona ytterligare:
dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm
Medan båda syntaxerna fungerar returnerar den förenklade syntaxen resultat utan att referera till den automatiska variabeln $_
i ett skriptblock. Den förenklade syntaxen läser mer som en instruktion för naturligt språk och kan vara lättare att förstå.
Metodnamnet GetKeyAlgorithm
skickas som ett argument för parametern MemberName för ForEach-Object
. När du anropar metoden med den förenklade syntaxen anropas metoden endast för varje objekt i pipelinen om objektet har den metoden. Därför får du samma resultat, men utan fel.
I nästa exempel Description
skickas till parametern MemberName för ForEach-Object
. Kommandot visar beskrivningen av varje System.Diagnostics.Process-objekt som returneras av Get-Process
.
Get-Process | foreach Description
I det här exemplet skickas metodnamnet GetFiles
till parametern MemberName för ForEach-Object
kommandot. Värdet .*
skickas till parametern ArgumentList . Metoden GetFiles()
anropas med sökmönsterparametern .*
för varje System.IO.DirectoryInfo-objekt som returneras av Get-ChildItem
.
Get-ChildItem /home -Directory | foreach GetFiles .*