Dela via


about_Simplified_Syntax

Kort beskrivning

Beskriver enklare och mer naturliga sätt att använda 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 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.

Överväg följande två anrop:

Standardsyntax

Get-ChildItem Cert:\LocalMachine\Root |
    Where-Object -FilterScript { $_.FriendlyName -eq 'Verisign' }
Get-ChildItem Cert:\ -Recurse |
    ForEach-Object -FilterScript { $_.GetKeyAlgorithm() }

Anteckning

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 standardsyntaxexempel:

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

Båda syntaxerna fungerar, men den förenklade syntaxen returnerar 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 .*

Se även