Skip to content

Как получить список компьютеров из списка сотрудников

18.05.2012

В организации не ведется учет рабочих станций, нет SCCM или любого подобного продукта, и при этом нужно получить перечень имен компьютеров, закрепленных за определенными сотрудниками? Нет ничего проще!

1. Хранить данные о том, на какой компьютер сотрудник вошел, я решил хранить прямо в AD в объекте User. Подходящего для этого поля в AD не нашлось, поэтому пришлось расширить схему, добавив свойство «workstationLoggedOn». Сразу же необходимо делегировать в домене полномочия для пользователя «SELF» на чтение и запись этого свойства у всех объектов типа User, что бы сами пользователи могли вносить изменения в AD.

2. Далее создал GPO, выполняющуюся в разделе «User» и выполняющую .vbs-скрипт:

On Error Resume Next
Err.Clear
Set oShell = CreateObject( «WScript.Shell» )
connection=oShell.ExpandEnvironmentStrings(«%SESSIONNAME%»)
If (connection = «Console») then
Set objSysInfo = CreateObject(«ADSystemInfo»)
strUserName = objSysInfo.UserName
Set objUser = GetObject(«LDAP://» & strUserName)
strOUName = objUser.Parent
Set wshShell = WScript.CreateObject( «WScript.Shell» )
strComputerName = wshShell.ExpandEnvironmentStrings( «%COMPUTERNAME%» )
Const ADS_PROPERTY_UPDATE = 2
Set objUser = GetObject(«LDAP://» & objSysInfo.UserName)
objUser.Put «workstationLoggedOn», strComputerName
objUser.SetInfo
End If

Что делает скрипт. Во-первых, он проверяет, что бы пользователь был подключен в активной физической сессии, а не через удаленный рабочий стол. Если подключение выполнено через RDP, выполнение скрипта останавливается. Если же подключение идет через сессию физической консоли, скрипт получает DN пользьователя и компьютера, после чего записывает в свойство «workstationLoggedOn» пользователя имя компьютера.

3. Далее остается только ждать. Информация по рабочим станциям будет заполняться при каждом входе в систему. Включив GPO в 10 утра, к 11 я имел достаточно солидный список сотрудников, которые опоздали на свои рабочие места ;-) Такой список я получил с помощью .ps-скрипта:

Import-Module ActiveDirectory
Clear-Host
$UsersArray = @()
$ServersArray = @(Get-ADComputer -SearchBase «OU=Servers,DC=domain,DC=local» -Filter *)
Get-ADUser -Filter * -Properties * | ? {
$UserCurrent = $_
If ($_.workstationLoggedOn) {
$WorkstationLoggedOn = $_.workstationLoggedOn
$ServersArray | % { if ($_.Name -eq $WorkstationLoggedOn) { $WorkstationIsServer = $True } }
if ($WorkstationIsServer -eq $False) { $UsersArray += $UserCurrent }
$WorkstationIsServer = $False
}
}
$UsersArray | % { Write-Host $_.workstationLoggedOn $_.Name }

Скрипт импортирует модуль управления AD, считывает перечень всех сотрудников из AD и список компьютеров из OU=Servers. Список серверов нужен для того, что бы исключить из результатов выборки серверы (ведь нам не нужно фиксировать вход системных администраторов на серверы). Результат помещается в массив, из которого можно забрать любые параметры объекта User, то есть выполнить выборку по любым интересующим нас параметрам (отдел, в котором работает сотрудник, адрес офиса и т.д.).

Полученный список рабочих станций, для примера, можно поместить в группу, для которой включена GPO установки клиента Lync, получив выборку сотрудников по необходимому отделу (для предыдущей статьи о развертывании клиента Lync в домене это как раз очень актуально, ведь она использует группу с компьютерами для установки).

Вот, собственно и всё ;-)

Реклама

From → Active Directory

Добавить комментарий

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: