Как узнать имя пользователя за компьютером?

13.01.2011

Иногда необходимо узнать какой пользователь домена работает за компьютером, а иногда и наоборот необходимо узнать за какими компьютерами в домене работает пользователь (или просто получить список пользователей работающих на Пк в домене). Для этого дела у меня есть два небольших скрипта:

Скрипт № 1:  получение имени пользователя работающего на компьютере в домене

strComputer = «computername»
Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\CIMV2»)
Set colItems = objWMIService.ExecQuery( _
«SELECT * FROM Win32_ComputerSystem»,,48)
For Each objItem in colItems
Wscript.Echo «UserName: » & objItem.UserName
Next

Этот скрипт выдаст логин с которым работает пользователь на указанном компьютере. Если нужен не только логин, но и DN , то можно скомбинировать его с примером из предыдущего поста:  Список пользователей в группе AD.

Теперь рассмотрим обратную ситуацию.  Пользователь зашел на многих компьютерах или постоянно перемещается и необходимо узнать где он  работает.

Скрипт № 2:  Получение списка компьюетров в домене и работающих за ними пользователей

On Error Resume Next
Dim target

Set fs=WScript.CreateObject(«Scripting.FileSystemObject»)
target=»Chita.mts.ru»
Set domain=GetObject(«WinNT://»&target)
domain.Filter = Array(«Computer»)
Set f=fs.OpenTextFile(«done_all.txt»,2,True)

For Each Computer In Domain

Set objPing = GetObject(«winmgmts:{impersonationLevel=impersonate}»).ExecQuery(«select * from Win32_PingStatus where address = ‘»& Computer.Name & «‘»)
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then

f.WriteLine Computer.Name & » poweroff»

else
strComputer = Computer.Name

Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\CIMV2»)
Set colItems = objWMIService.ExecQuery( _
«SELECT * FROM Win32_ComputerSystem»,,48)
For Each objItem in colItems
f.WriteLine Computer.Name & «;UserName: » & objItem.UserName
Next

End If
Next

Next

Этот скрипт немного сложнее  и в нем появилась такая важная вещь как получение списка ПК в домене. полученный список обходится и проверяется на доступность. Если компьютер  доступен,  то через WMI запрашивается пользователь. Если за компьютером никто не работает то выведется пустой пользователь. Полученный файлик  можно просмотреть и отобрать (найти) нужные строки. На моем домене в 100 ПК, скрипт отработал все компьютеры примерно за 2-3 минуты.

9 комментариев

  • sereg 11.04.2011 в 4:21 пп

    спасибо автору)

  • root 17.11.2011 в 2:49 дп

    Респект! Очень помогло!

  • User 16.10.2012 в 7:12 пп

    Большое спасибо! Супер, то что надо!

  • Vasya 24.12.2012 в 6:32 пп

    Объясните плз тупому, какой именно «скрипт» имеется ввиду. Куда копипастить этот волшебный текст? в .cmd .vbs?

  • Андрей 08.04.2013 в 4:29 пп

    Добрый день! хотел уточнить по второму скрипту.
    Какие поля необходимо заменить чтобы получить список?
    плиз подскажите.

  • Андрей 08.04.2013 в 9:22 пп

    да у меня заработало!!! ура!

    только вот хотелось бы что бы чтобы по мимо имя компьютера компьютера и текущего пользователя ещё выводилась имя и фамилия пользователя из AD

  • SmertNIk 27.05.2013 в 3:21 дп

    Может я что то не так делаю, но скрипт:
    _________________________________________________
    On Error Resume Next
    Dim target

    Set fs=WScript.CreateObject(«Scripting.FileSystemObject»)
    target=»Chita.mts.ru»
    Set domain=GetObject(«WinNT://»&target)
    domain.Filter = Array(«Computer»)
    Set f=fs.OpenTextFile(«done_all.txt»,2,True)

    For Each Computer In Domain

    Set objPing = GetObject(«winmgmts:{impersonationLevel=impersonate}»).ExecQuery(«select * from Win32_PingStatus where address = ‘»& Computer.Name & «‘»)
    For Each objStatus in objPing
    If IsNull(objStatus.StatusCode) or objStatus.StatusCode0 Then

    f.WriteLine Computer.Name & » poweroff»

    else
    strComputer = Computer.Name

    Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\CIMV2»)
    Set colItems = objWMIService.ExecQuery( _
    «SELECT * FROM Win32_ComputerSystem»,,48)
    For Each objItem in colItems
    f.WriteLine Computer.Name & «;UserName: » & objItem.UserName
    Next

    End If
    Next

    Next

    _________________________________________________
    Как то у меня фиговато отработал, короче поставил на некоторый компы что я там сижу, хотя я к ним доступ не имею, да и с другими компами таже беда, типа там сидят другие юзеры….
    что то не так….

  • Дмитрий 01.08.2016 в 6:38 пп

    Как задать диапазон ip адресов компьютеров и можно ли ? Чтобы не весь домен.

Добавить комментарий для Андрей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *