繁体   English   中英

如何从 PowerShell/CMD 中的会话查询中导入数字

[英]How do I import a number from a session query in PowerShell/CMD

我正在尝试创建一个 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,例如$activeSession = ,然后像这样运行脚本

Mstsc /shadow:$activeSession /v:192.168.255.2 /control /NoConsentPrompt /prompt

任何帮助表示赞赏!

如果您想要Active会话的ID ,您可以执行以下操作:

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是任何非数字。 由于-replace没有替换字符串,因此会删除任何匹配的字符。


更多的 PowerShell 解决方案可以使用Invoke-Command

$sessions = Invoke-Command -Scriptblock {qwinsta} -Credential Domain\User -ComputerName 192.168.255.2
$activeSession = $sessions -match '\b\d+\s+Active\b' -replace '\D'

这将需要配置PSRemoting

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM