Могу ли я найти идентификатор сеанса для входа пользователя на другой компьютер?

Я хочу открыть приложение на другом компьютере в той же сети через командную строку. Сценарий здесь состоит в том, что пользователь находится в комнате, окруженной примерно 20 компьютерами, и хочет иметь возможность запускать одно и то же приложение на каждом компьютере, не переходя от экрана к экрану, открывая его на каждой отдельной машине. Я обнаружил, что я могу получить основные функции для этого, используя PsExec следующим образом:

psexec \\[computer] -u [username] -p [password] -d -i [SessionID] [program] 

Для computer , username , password и program , я хорош. Кто-нибудь знает, каким образом я могу определить, какой SessionID назначен конкретному пользователю, зарегистрированному на конкретном компьютере в сети? Альтернативно, есть ли лучший способ сделать то, что я пытаюсь выполнить?

5 Solutions collect form web for “Могу ли я найти идентификатор сеанса для входа пользователя на другой компьютер?”

Вы можете использовать qwinsta (или query session ) для отображения всех сеансов сервера терминалов.

Некоторые серверы позволяют использовать его удаленно напрямую:

 Qwinsta / server remotehost

В большинстве случаев вам придется запускать его через psexec :

 Psexec \\ remotehost qwinsta

Psexec не требует идентификатора сеанса.

Вы можете попробовать версию PowerShell :

 Get-Process powershell | Select-Object SessionId | Format-List 

Или пакетной версии MSDOS :

 tasklist /FI "IMAGENAME eq tasklist.exe" /FI "USERNAME eq %USERNAME%" /FO LIST | find "Session#:" 

Используя Process Explorer на компьютере, вы можете использовать меню « Пользователи», чтобы определить идентификатор сеанса. Число в начале каждой записи в меню – это идентификатор сеанса.

Похоже, что вы обычно можете использовать 0 для сеанса по умолчанию.

Использование правильного идентификатора сеанса действительно может потребоваться для адекватного запуска задания на удаленном компьютере, к которому обращаются несколько отдельных пользователей.

Вот что я нашел после того, как возился с комбинацией командных команд и psexec . Я свернул все это в файл * .bat, взяв 4 параметра : (P1) UserName, (P2) ServerName, (P3) Login, (P4) Password.

После выполнения (и в случае успеха) информация о сеансе просто сохраняется в 4 переменных : (V1) SessionName, (V2) SessionUser, (V3) SessionId, (V4) SessionState.

Пакет предназначен для удаленного доступа к информации, но может быть легко адаптирован к локальному использованию.

 @echo off REM This program gets remote session info on a given server, for a given user. REM It needs 4 parameters: UserName, ServerName, Login, Password REM For a local session, simply replace the 'psexec \\...' command parsed by the 'for' REM loop with: 'query session ^| find /i "%UserName%"' REM In that case, only the UserName parameter is necessary to call this batch. set UserName=%1 set ServerName=%2 set Login=%3 set Password=%4 set SessionName= set SessionUser= set SessionId= set SessionState= for /f "tokens=1,2,3,4 delims=^> " %%a in ('psexec \\%ServerName% -u %Login% -p %Password% query session ^| find /i "%UserName%"') do ( REM Test iterator because a disconnected session may no longer have a name! if /I "%%b"=="%UserName%" ( set SessionName=%%a set SessionUser=%%b set SessionId=%%c set SessionState=%%d ) if /I "%%a"=="%UserName%" ( set SessionName=[unknown] set SessionUser=%%a set SessionId=%%b set SessionState=%%c ) ) echo Session info: echo - Name: %SessionName% echo - User: %SessionUser% echo - ID: %SessionId% echo - State: %SessionState% 

ЗАМЕТКИ:

  • Оболочками цикла являются «>» и «пробел». Это потому, что вывод команды «query session» содержит «>», чтобы указать активный сеанс на целевой машине. Мне пришлось найти путь для цикла, чтобы игнорировать этот неприятный характер, поскольку его обычно интерпретируют как перенаправление на файл.
  • Я добровольно проигнорировал тип сеанса и выходы устройства . Я полагаю, что в конечном итоге они могут быть добавлены с использованием %% e и %% f, чтобы в случае необходимости добавить еще 2 переменных в цикл.
  • Как поясняется в комментарии к пакету, для использования пакета на локальном компьютере вы не должны использовать вызов psexec \\ … ', но: ' query session ^ | Найдите / i "% UserName%" ' . В этом случае необходим только параметр P1 .
Давайте будем гением компьютера.