過濾和隔離 PowerShell 物件
在 Windows PowerShell 中,執行 Get 請求時的大部分結果通常以 PowerShell 物件 (PSObject) 格式建立和顯示。PSObjects 是 PowerShell 區別於其他指令碼語言的關鍵功能之一。
但是,我們無法快速搜尋 PSObject,因為它的屬性,因此我們需要在建立搜尋索引之前隔離屬性。在本文中,我們將討論 Windows PowerShell 物件、如何解析 PS 物件的結果以使結果可搜尋,以及使用 PowerShell 執行適當的過濾。
PowerShell 物件概述
如前所述,PowerShell 物件是指令碼語言的亮點之一。每個 PowerShell 物件都具有將物件定義為一個整體的屬性。
我們以 Get-Service
為例。
示例程式碼:
Get-Service
輸出:
Status Name DisplayName
------ ---- -----------
Running AarSvc_147d22 Agent Activation Runtime_147d22
Running AdobeARMservice Adobe Acrobat Update Service
Running AESMService Intel® SGX AESM
在 Get-Service
PowerShell 物件中,我們將 Status
、Name
和 DisplayName
作為它們的屬性。要過濾掉物件,我們必須使用 Where-Object
命令在其屬性之間隔離物件。
例如,我們只能獲取 Status
型別或 Name
型別,但我們不能不先呼叫屬性就只搜尋特定關鍵字。
示例程式碼:
Get-Service | Where-Object {$_.Status -match "Stopped" }
輸出:
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
在本文的下一部分中,我們將討論如何將這些輸出顯示為字串而不是 PS 物件格式,並使用不同的搜尋查詢執行過濾。
使用 PowerShell 過濾輸出
為了快速過濾輸出,我們需要以字串格式顯示輸出。我們必須通過管道將命令傳遞給 Out-String
命令。
對於下面的示例,我們將它分配給一個變數,以便我們的下一個程式碼片段更容易。
示例程式碼:
$serviceOutput = (Get-Service | Out-String) -split "`r`n"
由於值儲存在變數中,上面的程式碼不會產生結果。此外,我們還執行了一個小字串操作,以每行劃分結果行。
如果我們稍後過濾,指令碼將逐行顯示它,而不是隻顯示一個完整的字串。
$serviceOutput
變數中儲存的值採用字串格式。要搜尋關鍵字,我們需要將 Select-String
命令與我們希望搜尋的關鍵字一起傳遞。
示例程式碼:
$serviceOutput | Select-String Intel
輸出:
Running AESMService Intel® SGX AESM
Stopped Intel(R) Capabi... Intel(R) Capability Licensing Servi...
Stopped Intel(R) TPM Pr... Intel(R) TPM Provisioning Service
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn