从输出中提取文本

时间:2015-12-08 18:33:18

标签: powershell

我正在使用VS和PowerShell创建我的第一个应用程序,需要从listview获取服务的名称。选择的输出如下所示:

ComputerName  Status Name    DisplayName            
------------  ------ ----    -----------            
PC           Running Appinfo Application Information

我想要做的是从Appinfo列获取值Name并将其分配给变量。我对正则表达式没有运气,但我再次成为初学者,所以我可能做错了什么。是否有捷径可寻?

1 个答案:

答案 0 :(得分:0)

您当前获得的输出是对象的选定属性的格式化(表格)视图(即属性ComputerNameStatusName和{{1} })。您可以通过DisplayName cmdlet扩展特定属性的值:

Select-Object

您还可以将对象存储在变量中,并通过点符号访问该属性:

$name = ... | Select-Object -Expand Name

请注意,如果cmdlet输出多个对象,则变量将包含一个数组:

$obj  = ...
$name = $obj.Name

您可以按索引访问成员对象的属性:

PS C:\> $services = Get-Service
PS C:\> $services.GetType().FullName
System.Object[]
PS C:\> $services.Count
136

或通过其属性选择特定对象:

$services[42].Name

从PowerShell v3开始,您还可以使用点属性表示法来获取所有数组成员的特定属性的值:

$services | Where-Object { $_.DisplayName -eq 'Application Information' } |
  Select-Object -Expand Name

在PowerShell v3之前,这会抛出错误,因为数组对象没有属性$services.Name