从psexec / PowerShell query user命令中提取会话ID

时间:2013-09-05 17:23:13

标签: session powershell rdp psexec

我正在编写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语法,并且无法找到解释格式化选项的站点。有人可以帮我吗?如果你知道一个网站,我可以从中学到更多关于从字符串中提取片段的知识?提前谢谢。

1 个答案:

答案 0 :(得分:2)

试试这个:

$id = $results | ? { $_ -match '(\d+)\s+Active' } | % { $matches[1] }

正则表达式(\d+)\s+Active将匹配关键字“Active”,前面是数字,后续循环返回第一个子匹配(即数字)。