WMI-запрос, получить локальную информацию с удаленного сервера (для BgInfo)

551
root

Я использую BgInfo на сервере Windows, к которому пользователи подключаются удаленно через RDP. BgInfo позволяет создавать пользовательские элементы на основе запросов WMI. Я хотел бы показать локальное имя пользователя или IP-адрес. Существует ли класс WMI, содержащий имя локального хоста удаленно подключенного пользователя? Иначе, есть ли еще один шаг в BgInfo, чтобы получить эту информацию?

2
Примерно так: `wmic.exe / node:" IP-or-HostName "ComputerSystem Получить имя пользователя`? harrymc 5 лет назад 0
Результатом является только заголовок столбца с именем «Имя пользователя». Предполагаемый запрос будет запущен с сервера, к которому удаленно подключен пользователь, и должен вернуть локальное имя пользователя. root 5 лет назад 0
Таким образом, вы в основном запрашиваете имя хоста пользователя на его собственном компьютере, но делаете это из его сеанса RDP на сервере. Это верно? harrymc 5 лет назад 0
Это правильно. root 5 лет назад 0
@PimpJuiceIT IP допустим вместо имени хоста. WMI является предпочтительным решением, так как это один из немногих источников пользовательских значений, которые предлагает BgInfo. В BgInfo есть и другие параметры источника, такие как «Содержимое файла», но я бы хотел избежать нескольких шагов для достижения этого решения, если это вообще возможно (например, запуск Powershell с сохранением результатов в файл). root 5 лет назад 0

2 ответа на вопрос

2
Alex

Не решение WMI, но проще: если вы выполняете следующий скрипт на сервере при подключении по RDP, вы получите имя хоста удаленного компьютера, подключенного по RDP

@echo off  echo %CLIENTNAME%  exit 

На самом деле вам не нужен скрипт, так как он bginfoпозволяет использовать настраиваемое поле. Перейти к пользовательским полям-> добавить новое поле и выбрать Environment variableи добавить переменную =CLIENTNAME

0
harrymc

Насколько я знаю, WMI не может этого сделать. Вам нужно будет использовать Win32 API, например, в PowerShell, и напрямую вызывать функцию WTSQuerySessionInformation, находящуюся внутри wtsapi32.dll, используя параметры:

hServer = WTS_CURRENT_SERVER_HANDLE (null or 0) SessionId = WTS_CURRENT_SESSION (-1) 

Вы можете найти работающий пример PowerShell для вызова WTSQuerySessionInformation в этом ответе сервера, который должен помочь вам начать работу.

Элемент, который вы хотите получить, взятWTSClientName из перечисления _WTS_INFO_CLASS, содержащего « Строку с нулевым символом в конце, содержащую имя клиента», что означает имя клиентского компьютера. Как его получить также продемонстрировано в приведенном выше примере.