Иногда необходимо узнать какой пользователь домена работает за компьютером, а иногда и наоборот необходимо узнать за какими компьютерами в домене работает пользователь (или просто получить список пользователей работающих на Пк в домене). Для этого дела у меня есть два небольших скрипта:
Скрипт № 1: получение имени пользователя работающего на компьютере в домене
strComputer = «computername»Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\CIMV2»)Set colItems = objWMIService.ExecQuery( _«SELECT * FROM Win32_ComputerSystem»,,48)For Each objItem in colItemsWscript.Echo «UserName: » & objItem.UserNameNext
Этот скрипт выдаст логин с которым работает пользователь на указанном компьютере. Если нужен не только логин, но и 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 Thenf.WriteLine Computer.Name & » poweroff»
else
strComputer = Computer.NameSet 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
NextEnd If
NextNext
Этот скрипт немного сложнее и в нем появилась такая важная вещь как получение списка ПК в домене. полученный список обходится и проверяется на доступность. Если компьютер доступен, то через WMI запрашивается пользователь. Если за компьютером никто не работает то выведется пустой пользователь. Полученный файлик можно просмотреть и отобрать (найти) нужные строки. На моем домене в 100 ПК, скрипт отработал все компьютеры примерно за 2-3 минуты.
9 комментариев
спасибо автору)
Респект! Очень помогло!
Большое спасибо! Супер, то что надо!
Объясните плз тупому, какой именно «скрипт» имеется ввиду. Куда копипастить этот волшебный текст? в .cmd .vbs?
vbs
Добрый день! хотел уточнить по второму скрипту.
Какие поля необходимо заменить чтобы получить список?
плиз подскажите.
да у меня заработало!!! ура!
только вот хотелось бы что бы чтобы по мимо имя компьютера компьютера и текущего пользователя ещё выводилась имя и фамилия пользователя из AD
Может я что то не так делаю, но скрипт:
_________________________________________________
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
_________________________________________________
Как то у меня фиговато отработал, короче поставил на некоторый компы что я там сижу, хотя я к ним доступ не имею, да и с другими компами таже беда, типа там сидят другие юзеры….
что то не так….
Как задать диапазон ip адресов компьютеров и можно ли ? Чтобы не весь домен.