How to determine the session id on remote machine for usage with psexec -i using script/powershell/...?
As long as you're using PSExec, I would just stick with it. You can get the ID field pretty easily given a username e.g.:
$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
Note that you want to use -d
with PSExec otherwise it will wait until the launched program exits.
It's possible to do that without PowerShell.There is qwinsta
command line tool that ships with Windows that you can use.
Example:
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
Usage:
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.
With the PSTerinalServices powershell module you can get the user sessions and IDs.
The module can be found here: http://code.msdn.microsoft.com/PSTerminalServices
PS > Get-TSSession -UserName user1 -ComputerName pc1 | select UserName,SessionIdUserName SessionId-------- ---------User 1