过滤和隔离 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