Статья рассказывает, как определить имя пользователя удаленного компьютера, например, что на компьютере 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