我有一个变量$ results,其值为:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
rdp-tcp#1 account17 7 Active rdpwd
我想单独获取ID的值,并在不同的查询中使用它。
我尝试了以下方法:
1。$idValue = @($result | %{ $_.ID })
- 但它没有获得价值。
2. $result |Select -ExpandProperty ID
- 我收到错误'Select-Object:Property“ID”无法找到。“
如何从结果中单独获取属性ID的值?
答案 0 :(得分:1)
qwinsta
/ query
命令的输出是字符串,而不是对象,因此没有要打印的属性ID
。如果希望字段为属性,则需要将字符串转换为对象:
query session | ? { $_ -match '^[ >](\S+) +(\S*?) +(\d+) +(\S+)' } |
select @{n='Service';e={$matches[1]}},
@{n='Username';e={$matches[2]}},
@{n='ID';e={$matches[3]}},
@{n='Status';e={$matches[4]}} | % {
$_.ID
}
或者,如果您只对ID感兴趣,可以像这样更换正则表达式:
$account = 'account17'
$pattern = '^[ >]\S+ +\S*? +(\d+) +\S+.*'
(query session $account | select -Skip 1) -replace $pattern, '$1'
答案 1 :(得分:0)
这是正确引用单个属性的格式。我没有看到你的命令来创建你的RDP $结果,所以我将举例说明get-process,用()封装它并将().ID粘贴到最后。适用于任何属性,而不仅仅是.ID
(get-process | where {$_.Name -eq "Powershell"}|select ID).ID
# or
$MYID = (get-process | where {$_.Name -eq "Powershell"}|select ID).ID
$MYID
答案 2 :(得分:0)
另一种选择是-split:
一种解决方案,使用V4:
($result).ForEach({($_ -split '\s+')[2]}) -match '\d'