2013-09-05 52 views
1

我正在编写一个PowerShell脚本来查找远程计算机上活动用户的会话ID,然后使用该会话ID启动程序。这是我到目前为止。从psexec/PowerShell提取会话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

或者使用更多的powershell(实际上是WMI),你不需要psexec也不需要字符串挥手。 http://gallery.technet.microsoft.com/scriptcenter/0e43993a-895a-4afe-a2b2-045a5146048a –

回答

2

尝试这种情况:

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

正则表达式(\d+)\s+Active将匹配关键字“活动”通过许多和随后的环preceeded返回第一子匹配(即,数量)。

+0

这就像一个魅力,谢谢。我会确保阅读正则表达式。 – user2258327