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

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

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

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

  • Как перемещать окна, открывающиеся за кадром?
  • Как увеличить размер пути к файлу в Windows 7?
  • Что такое настройка переменной среды PATH по умолчанию при новой установке Windows 7
  • Дублируемое окно через мониторы
  • GUI для туннеля VNC через SSH
  • Как найти, какое фактическое приложение использует порт 80 через системный процесс
  • Показать дубликаты данных с awk print $ 2, $ 3, $ 4 в одной строке
  • Как я могу «grep» рекурсивно фильтровать имя файлов, которые я хочу с помощью подстановочных знаков?
  • Каталог / ETC перенесен! - Ubuntu 13.04
  • Есть ли способ объединить текстовые файлы с помощью командной строки Windows?
  • Как добавить в файл как sudo?
  • Заменить встроенные команды с помощью пользовательских команд для CMD.exe
  • 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 .
    Давайте будем гением компьютера.