about_Simplified_Syntax
簡短描述
描述物件集合文本篩選的簡單、更自然的語言方式。
詳細描述
Windows PowerShell 3.0 中引進的簡化語法可讓您建置一些篩選命令,而不使用腳本區塊。 簡化的語法更類似自然語言,而且主要適用於物件集合,這些物件會透過管線傳送至命令 Where-Object
和 ForEach-Object
或其對應的別名 where
和 foreach
。
您可以在集合的成員上使用方法(最常見的是陣列),而不參考腳本區塊內的自動變數 $_
。
請考慮下列兩個叫用:
標準語法
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
由於 Property 和 MemberName 參數是位置,因此您可以從 命令中省略它們。 使用別名,您可以進一步簡化命令:
dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm
雖然這兩種語法都能運作,但簡化的語法會傳回結果,而不參考腳本區塊內的自動變數 $_
。 簡化的語法會更像是自然語言語句,而且更容易理解。
方法名稱GetKeyAlgorithm
會傳遞為的 MemberName 參數自ForEach-Object
變數。 當您使用簡化的語法叫用 方法時,只有在該物件具有該方法時,才會針對管線中的每個物件呼叫 方法。 因此,您會得到相同的結果,但沒有錯誤。
在下一個範例中,Description
會傳遞至 的 ForEach-Object
MemberName 參數。 此命令會顯示 所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 .*