我正在尝试创建一个PowerShell脚本,该脚本允许我查询用户会话并在RDP中隐藏所述会话。我想从qwinsta
中提取活动会话,但只有在输入插入域的凭据时才能提取结果。以下是我在PowerShell中的意思示例:
runas /user:DOMAINUSER "cmd /k qwinsta /server:192.168.255.2"
将输出
SESSIONNAME USERNAME ID STATE
services 0 Disc
console jdoe 2 Active
rdp-tcp 65536 Listen
这将调出cmd并允许我查看查询的输出。然而,我不想每次都这样做,因为这很乏味。我是PowerShell的新手,所以请原谅我的无知,但我如何提取jdoe的ID号(在本例中为数字2(,以变量/字符串(如$activeSession =
(的形式将其导入PowerShell,然后像一样运行脚本
Mstsc /shadow:$activeSession /v:192.168.255.2 /control /NoConsentPrompt /prompt
感谢您的帮助!
如果您想要Active
会话中的ID
,您可以执行以下操作:
runas /user:DOMAINUSER "cmd /a /c qwinsta /server:192.168.255.2 > c:tempsessions.txt"
$activeSession = (Get-Content c:tempsessions.txt) -match 'bd+s+Activeb' -replace 'D'
cmd qwinsta
命令将输出到文件sessions.txt
。然后,您可以使用Get-Content
读取文件并解析所需的数据。
-match
和-replace
是使用正则表达式匹配字符串的比较运算符。CCD_ 16是一个单词边界。d+
是一个或多个数字。D
是任何非数字。由于-replace
没有替换字符串,因此将删除任何匹配的字符。
一个更PowerShell的解决方案可以利用InvokeCommand:
$sessions = Invoke-Command -Scriptblock {qwinsta} -Credential DomainUser -ComputerName 192.168.255.2
$activeSession = $sessions -match 'bd+s+Activeb' -replace 'D'
这将需要配置PSRemoting。