我试图将powershell命令的输出放入一个数组,但它似乎无法正常工作.实际上我想用行和列索引来解决输出问题.例如
$a=Get-Service
Run Code Online (Sandbox Code Playgroud)
带输出(部分)
Status Name DisplayName
------ ---- -----------
Stopped AeLookupSvc Application Experience
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
Running Appinfo Application Information
Stopped AppMgmt Application Management
Run Code Online (Sandbox Code Playgroud)
我想在第二行解决DisplayName,例如
$a[2][2]
Run Code Online (Sandbox Code Playgroud)
然后它应该给予
Application Layer Gateway Service
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
有人可以帮忙吗?
这类问题让我觉得你可能来自Unix背景,习惯于不得不处理指标和列索引等等.
从根本上说,PowerShell是一种面向对象的脚本语言.你根本不需要在这里做你所要求的事情.
例如,如果你想捕获结果,那么抓住其中一个对象的属性,这就是如何完成的.
首先,捕获输出.
$a=Get-Service
Run Code Online (Sandbox Code Playgroud)
现在,您需要特定实体的特定属性.为此,索引到您想要的对象.
>$a[2]
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Run Code Online (Sandbox Code Playgroud)
要选择.DisplayName
,您只需将其附加到上一个命令的末尾即可.
> $a[2].DisplayName
AllJoyn Router Service
Run Code Online (Sandbox Code Playgroud)
如果要选择多个值,则可以使用此方法.
#Select multiple values from one entity
$a[2] | select DisplayName, Status
>DisplayName Status
----------- ------
Application Layer Gateway Service Stopped
#Select multiple values from each in the array
$a | select DisplayName, Status
>DisplayName Status
----------- ------
Adobe Acrobat Update Service Running
AllJoyn Router Service Stopped
Application Layer Gateway Service Stopped
Application Identity Stopped
Run Code Online (Sandbox Code Playgroud)
如果没有从属性名称到数组索引的映射,这是不可能的.请注意,您在输出中看到的只是部分属性列表(在某个XML文件中定义).因此,甚至没有一种简单的方法可以将它们转换为数组索引.
但是,我也不太了解你的需求.您可以$a[1]
按预期获得第二项服务.然后你可以获得它的DisplayName
属性值$a[1].DisplayName
.PowerShell始终使用对象.只是为了获取数据,根本不需要回退到文本解析或神秘列索引.有一种更简单的方法.
您在控制台中看到的输出Get-Service
可能看起来像一个数组(因为它在发送到控制台时被格式化为表格),但它实际上是一个“System.ServiceProcess.ServiceController”对象。
您需要使用属性的名称来检索它,而不是使用行和列指定,因此对于您的示例:
$a[2].DisplayName
将返回Application Layer Gateway Service
归档时间: |
|
查看次数: |
23534 次 |
最近记录: |