共用方式為


about_Simplified_Syntax

簡短描述

描述物件集合文本篩選的簡單、更自然的語言方式。

詳細描述

Windows PowerShell 3.0 中引進的簡化語法可讓您建置一些篩選命令,而不使用腳本區塊。 簡化的語法更類似自然語言,而且主要適用於物件集合,這些物件會透過管線傳送至命令 Where-ObjectForEach-Object 或其對應的別名 whereforeach

您可以在集合的成員上使用方法(最常見的是陣列),而不參考腳本區塊內的自動變數 $_

請考慮下列兩個叫用:

標準語法

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

注意

在第二個命令中, GetKeyAlgorithm 會在集合中的每個物件上呼叫 方法。 如果從管線接收的對象沒有 GetKeyAlgorithm 方法,此命令會產生錯誤。

簡化的語法

在簡化的語法下,在集合中對象成員上運作的比較運算符會實作為參數。 此外,您可以在集合中的物件上叫用方法,而不參考腳本區塊內的自動變數 $_ 。 將下列兩個調用與標準語法範例進行比較:

Get-ChildItem Cert:\LocalMachine\Root |
    Where-Object -Property FriendlyName -EQ 'Verisign'
Get-ChildItem Cert:\ -Recurse |
    ForEach-Object -MemberName GetKeyAlgorithm

由於 PropertyMemberName 參數是位置,因此您可以從 命令中省略它們。 使用別名,您可以進一步簡化命令:

dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm

雖然這兩種語法都能運作,但簡化的語法會傳回結果,而不參考腳本區塊內的自動變數 $_ 。 簡化的語法會更像是自然語言語句,而且更容易理解。

方法名稱GetKeyAlgorithm會傳遞為的 MemberName 參數自ForEach-Object變數。 當您使用簡化的語法叫用 方法時,只有在該物件具有該方法時,才會針對管線中的每個物件呼叫 方法。 因此,您會得到相同的結果,但沒有錯誤。

在下一個範例中,Description會傳遞至 ForEach-ObjectMemberName 參數。 此命令會顯示 所Get-Process傳回之每個 System.Diagnostics.Process 物件的描述。

Get-Process | foreach Description

在此範例中,方法名稱GetFiles會傳遞至命令的 ForEach-Object MemberName 參數。 值 .* 會傳遞至 ArgumentList 參數。 使用 GetFiles() 所傳回Get-ChildItem之每個 System.IO.DirectoryInfo 物件的搜尋模式參數.*來呼叫 方法。

Get-ChildItem /home -Directory | foreach GetFiles .*

另請參閱