我需要一个脚本或powershell命令,它能够确定远程机器上特定登录用户的会话ID,以后用作psexec -i执行远程gui进程的参数该用户在远程计算机上的会话。
到目前为止我设法使用
psexec \\remoteMachine -u user -p pswrd query session
获取远程计算机上的会话列表:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
console 0 Conn wdcon
rdp-tcp#919 user 1 Active rdpwd
rdp-tcp#916 user 3 Active rdpwd
所以我想我可以以某种方式隔离所需的id并使用它 - 但还没有设法做到这一点
有什么想法吗? 也许其他 - 更简单的方法?
感谢您的帮助。
答案 0 :(得分:14)
只要您使用PSExec,我就会坚持下去。您可以使用用户名轻松获取ID字段,例如:
$username = 'joe'
$results = psexec \\remoteMachine -u adminuser -p password query session
$id = $results | Select-String "$username\s+(\w+)" |
Foreach {$_.Matches[0].Groups[1].Value}
psexec \\remoteMachine -u $username -i $id -d notepad.exe
请注意,您希望将-d
与PSExec一起使用,否则它将等到启动的程序退出。
答案 1 :(得分:6)
没有PowerShell就可以做到这一点。
您可以使用Windows附带的qwinsta
command line tool。
示例:
c:\>qwinsta
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console 1 Conn
>rdp-tcp#0 YourUser 2 Active rdpwd
rdp-tcp 65536 Listen
用法:
c:\>qwinsta /?
Display information about Remote Desktop Sessions.
QUERY SESSION [sessionname | username | sessionid]
[/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM]
sessionname Identifies the session named sessionname.
username Identifies the session with user username.
sessionid Identifies the session with ID sessionid.
/SERVER:servername The server to be queried (default is current).
/MODE Display current line settings.
/FLOW Display current flow control settings.
/CONNECT Display current connect settings.
/COUNTER Display current Remote Desktop Services counters information.
/VM Display information about sessions within virtual machines.
答案 2 :(得分:4)
使用PSTerinalServices powershell模块,您可以获得用户会话和ID 可以在此处找到该模块:http://code.msdn.microsoft.com/PSTerminalServices
PS > Get-TSSession -UserName user1 -ComputerName pc1 | select UserName,SessionId
UserName SessionId
-------- ---------
User 1