Статья рассказывает, как определить имя пользователя удаленного компьютера, например, что на компьютере BUH1 работает пользователь с логином IVANOVA.

Сетевое окружение

Определение имени пользователя через NetBIOS

Способ получает имена, зарегистрированные в NetBIOS на указанном компьютере, поэтому можно выполнить команду nbtstat -a BUH1, которая даст примерно такой вывод:

Local Area Connection:
Node IpAddress: [192.168.10.201] Scope Id: []

NetBIOS Remote Machine Name Table

Name               Type         Status
---------------------------------------------
BUH1           <00>  UNIQUE      Registered
WORKGROUP      <00>  GROUP       Registered
BUH1           <20>  UNIQUE      Registered
WORKGROUP      <1E>  GROUP       Registered
WORKGROUP      <1D>  UNIQUE      Registered
..__MSBROWSE__.<01>  GROUP       Registered
BUH1           <03>  UNIQUE      Registered
ADMINISTRATOR  <03>  UNIQUE      Registered

MAC Address = 00-0C-29-49-6B-1D

В данном примере видно, что сейчас зарегистрирован пользователь ADMINISTRATOR. С одной стороны, результат есть, с другой стороны, имя пользователя появляется в этом списке только при работающей службе сообщений (Messenger), соответственно, служба не запущена – результата нет.

Определение имени пользователя через WMI

Поэтому надёжнее воспользоваться возможностями WMI (Windows Management Instrumentation) с помощью, например, WSH & JScript (то же самое можно написать и на VBScript, но я предпочитаю JScript).

Код скрипта

Функция LoggedUserName возвращает имя пользователя на компьютере с именем, заданным параметром pc_name.

function LoggedUserName(pc_name){
    try {
        var wmi = GetObject("winmgmts:" +
            "{impersonationLevel=impersonate}!\\\\" + pc_name + "\\root\\cimv2");
        var pcs = wmi.ExecQuery("select * from Win32_computerSystem");
        var i = new Enumerator(pcs);
        for(; !i.atEnd(); i.moveNext()){
            var pc=i.item();
            return pc.UserName;
        }   
    }
    catch(e) {
        return "";
    }
    return "";
}

WScript.Echo(LoggedUserName("BUH1"));

В случае ошибки возвращается пустая строка.

Функция должна быть запущена с админскими правами на удалённый компьютер.

Запуск скрипта в JScript

В скрипте JS или WSF можно вызвать функцию LoggedUserName и записать значение в переменную:

var user_name = LoggedUserName("BUH1"));

или вывести на экран:

WScript.Echo( LoggedUserName("BUH1") );

Можно взять имя компьютера из параметра командной строки:

var user_name = WScript.Echo(LoggedUserName( WScript.Arguments(0) )));

Запуск скрипта в командной строке или bat файле

Чтобы получить имя пользователя в пакетном файл или в командной строке, нужно запустить скрипт через CScript или WScript, например:

cscript.exe //nologo username.js BUH1
Имя пользователя удаленного компьютера
Метки: