Текст:
Не буду углубляться в технические тонкости настройки AD - этому посвящено множество отличных статей.
Попробую рассказать о своем опыте использования этого инструмента.
Собственно AD представляет собой базу данных в которой можно хранить все что угодно, надежную и быструю базу данных. Если в организации уже внедрена AD необходимо стремится все данные относящиеся к пользователям, рабочим станциям и структуре организации хранить именно здесь.
В моем случае, сравнительно большая информационная система с 3000 рабочих мест, в процессе эксплуатации, потребовала настройки автоматической записи данных в AD. Автоматизация реализована на скриптах Powershell версии 3 запускаемых либо групповой политикой при входе пользователя в систему, либо на выделенном сервере через планировщик заданий.
Скрипт №1 запускается при входе пользователя в систему.
# получаем дату, время и форматируем их в привычный вид
$GetDate = Get-Date
$DateAdObjSet = "{0:dd.MM.yyyy HH:mm:ss}" -f $GetDate
# получаем имя пользователя от имени которого запущен текущий скрипт, от использования $env:username отказался - по непонятным причинам изредка возвращает пустые значения
$CurrentPS = (gwmi -class win32_process|?{$_.processid -eq $pid}).getowner()
$USERNAME = $CurrentPS.User
# получаем имя компьютера на котором выполнен вход и имя домена
$USERDNSDOMAIN = $env:USERDNSDOMAIN
$COMPUTERNAME = $env:COMPUTERNAME
# получаем версию Powershell, так как все скрипты реализованы на версии 3, нужно иметь возможность выборки рабочих станций с более старыми версиями
$PSver = 'PS'+$Host.Version.Major.ToString()
# получаем через WMI данные о серийном номере, производителе, модели (доступность данных зависит от производителя ПК)
$Bios_SN = gwmi Win32_BIOS | select -ExpandProperty SerialNumber
$CompSys = gwmi Win32_ComputerSystem
$CompSys_Man = $CompSys.Manufacturer
$CompSys_Mod = $CompSys.Model
# получаем MAC сетевого ethetnet адаптера, считаем, что на компьютере установлена одна сетевая карта
$CompMAC = (gwmi win32_NetworkAdapter | ? { $_.AdapterType -match "802.3" }).MACAddress
#получаем учетные записи и группы включенные в группу локальных администраторов
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")
$group=($objSID.Translate( [System.Security.Principal.NTAccount])).value.split("\")[1]
$de=[ADSI]"WinNT://./$group"
$localadmins=$de.psbase.invoke("Members")|foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
#формируем строку описания
$Description = "$USERNAME;$DateAdObjSet;$CompSys_Man;$CompSys_Mod;$Bios_SN;$PSver;$CompMAC"
#находим в AD учетную запись компьютера на котором выполнен вход
$USERDNSDOMAIN_DN = 'DC=' + $USERDNSDOMAIN -split "\." -join ',DC='
$Root = [ADSI]"LDAP://$USERDNSDOMAIN/$USERDNSDOMAIN_DN"
$SearchPC = new-object System.DirectoryServices.DirectorySearcher($Root)
$SearchPC.filter = "(Name=$COMPUTERNAME)"
$COMPUTER_DN = $SearchPC.FindAll() | select -ExpandProperty Path
$objComputer = [ADSI]$COMPUTER_DN
#сохраняем атрибуты в AD
$objComputer.put("Description",$Description)
$objComputer.PutEx(2,"carLicense",$localadmins)
$objComputer.SetInfo()
# завершаем скрипт
exit
В результате для каждой учетной записи компьютера атрибут AD description будет иметь вид
PetrovNM;20.07.2015 09:08:01;Hewlett-Packard;HP Compaq Pro 6305 SFF;CZC552685B;PS3;D4:C9:EE:EF:31:77
а атрибут carLicense будет хранить список учетных записей включенных в локальную группу Администраторы, группа может называться как угодно, в скрипте она идентифицируется не по имени, а по SID.
Добавить комментарий.