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



我正在尝试创建一个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。

最新更新