2013-09-05 53 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