我正在尝试创建一个PowerShell脚本,该脚本允许我查询用户会话并在RDP中隐藏所述会话。我想从qwinsta
中拉出活动会话,但是只有在为域输入凭据时才能拉出结果。这是我在PowerShell中的意思的示例:
runas /user:DOMAIN\USER "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),以可能的变量/字符串形式将其导入Powershell,例如[C0 ],然后像这样运行脚本
$activeSession =
感谢您的任何帮助!
如果要Mstsc /shadow:$activeSession /v:192.168.255.2 /control /NoConsentPrompt /prompt
会话的ID,则可以执行以下操作:
Active
runas /user:DOMAIN\USER "cmd /a /c qwinsta /server:192.168.255.2 > c:\temp\sessions.txt"
$activeSession = (Get-Content c:\temp\sessions.txt) -match '\b\d+\s+Active\b' -replace '\D'
命令将输出到文件cmd qwinsta
。然后,您可以使用sessions.txt
读取文件并解析所需的数据。
Get-Content
和-match
使用正则表达式匹配字符串。 -replace
是单词边界。 \b
是一个或多个数字。 \d+
是任何非数字。由于\D
没有替换字符串,因此将删除所有匹配的字符。