我试图将powershell命令的输出放入一个数组,但它似乎无法正常工作.实际上我想用行和列索引来解决输出问题.例如
$a=Get-Service
带输出(部分)
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
我想在第二行解决DisplayName,例如
$a[2][2]
然后它应该给予
Application Layer Gateway Service
但这似乎不起作用.
有人可以帮忙吗?
这类问题让我觉得你可能来自Unix背景,习惯于不得不处理指标和列索引等等.
从根本上说,PowerShell是一种面向对象的脚本语言.你根本不需要在这里做你所要求的事情.
例如,如果你想捕获结果,那么抓住其中一个对象的属性,这就是如何完成的.
首先,捕获输出.
$a=Get-Service
现在,您需要特定实体的特定属性.为此,索引到您想要的对象.
>$a[2] Status Name DisplayName ------ ---- ----------- Stopped AJRouter AllJoyn Router Service
要选择.DisplayName
,您只需将其附加到上一个命令的末尾即可.
> $a[2].DisplayName AllJoyn Router Service
如果要选择多个值,则可以使用此方法.
#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
如果没有从属性名称到数组索引的映射,这是不可能的.请注意,您在输出中看到的只是部分属性列表(在某个XML文件中定义).因此,甚至没有一种简单的方法可以将它们转换为数组索引.
但是,我也不太了解你的需求.您可以$a[1]
按预期获得第二项服务.然后你可以获得它的DisplayName
属性值$a[1].DisplayName
.PowerShell始终使用对象.只是为了获取数据,根本不需要回退到文本解析或神秘列索引.有一种更简单的方法.