我正在编写PowerShell脚本以查找远程计算机上活动用户的会话ID,然后使用该会话ID启动程序。这是我到目前为止所拥有的。
$queryusers = $psexecdirectory + ' \\' + $remotepc + ' -u ' + $domain + '\' + $username + ' -p ' + $password + ' query user'
$results = iex $queryusers
以上工作正常,下面的示例结果存储在变量$results
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
usr1 3 Disc 1:12 9/5/2013 11:59
AM
>usr2 rdp-tcp#1 4 Active . 9/5/2013 11:59
AM
我已经使用下面的内容来获取ID,但是当另一个用户登录时,会话名称'rdp-ctp#0'上的数字会发生变化,就像上面的输出一样,它会变得无用:
$id = $results | Select-String "$rdp-tcp#0\s+(\w+)" |
Foreach {$_.Matches[0].Groups[1].Value}
我不熟悉PowerShell语法,并且无法找到解释格式化选项的站点。有人可以帮我吗?如果你知道一个网站,我可以从中学到更多关于从字符串中提取片段的知识?提前谢谢。
答案 0 :(得分:2)
试试这个:
$id = $results | ? { $_ -match '(\d+)\s+Active' } | % { $matches[1] }
正则表达式(\d+)\s+Active
将匹配关键字“Active”,前面是数字,后续循环返回第一个子匹配(即数字)。