過濾和隔離 PowerShell 物件

Marion Paul Kenneth Mendoza 2023年1月30日 2022年7月12日
  1. PowerShell 物件概述
  2. 使用 PowerShell 過濾輸出
過濾和隔離 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 物件中,我們將 StatusNameDisplayName 作為它們的屬性。要過濾掉物件,我們必須使用 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell Object