В описании объектов типа “Компьютер” в Active Directory можно хранить различную полезную информацию. Например, информацию о модели компьютера или имя пользователя, который работает на этом компьютере. В этой статье мы рассмотрим, как автоматически добавлять и обновлять информацию в поле Description (Описание) компьютеров в Active Directory с помощью скриптов PoweShell.
Сохранить информацию о модели компьютера в Active Directory
Например, вы хотите, чтобы в поле Description (Описание) компьютеров и серверов в консоли Active Directory Users and Computers отображалась информация о производителе компьютера, его модели и серийном номере. Эту информацию можно получить простым WMI запросом с помощью следующей команды PowerShell:
Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber
Запрос возвращает следующие данные:
- Производитель (Vendor) – HP
- Модель (Name) – Proliant DL 360 G5
- Серийный номер (IdentifyingNumber) – CZJ733xxxx
Теперь нужно сохранить эти данные в поле Description этого компьютера в AD.
Получим имя текущего компьютера из переменной окружения и присвоим его переменной
$computer
:
$computer = $env:COMPUTERNAME
Затем в следующие переменные сохраним нужные нам данные компьютера:
$computerinfo= Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
Посмотрим, какие значения присвоены переменным:
$computer
$vendor
$Model
$SerialNumber
Осталось записать полученные данные в поле Description учетной записи компьютера в Active Directory. Выполните такой PowerShell скрипт:
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($ENV:USERDNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor | $Model | $SerialNumber" )
$computerObj.SetInfo()
Если вы хотите использовать именно командлеты из модуля AD PowerShell, вы можете скопировать файлы модуля на все компьютеры без установки RSAT.
Проверьте, что в поле Описание компьютера в консоли AD появились данные о производителе и модели.
Такой скрипт обновит данные в AD только для одного компьютера. Можно удаленно заполнить данные для всех компьютеров в домене с помощью Get-ADComputer и цикла foreach, но гораздо удобнее чтобы компьютеры автоматически при загрузке обновляли свою информацию в AD.
Для этого нужно создать групповую политику с PowerShell логон скриптом и назначить ее на все компьютеры:
- Откройте консоль управления доменными GPO (gpmc.msc), создайте новую политику и назначьте ее на OU с компьютерами;
- Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Scripts (Logon / Logoff) -> Logon;
- Перейдите на вкладку PowerShell Scripts;
- Нажмите кнопку Show Files и создайте файл FillCompDesc.ps1 со следующим кодом:# записать информацию о модели компьютер в поле description AD
$computer = $env:COMPUTERNAME
$computerinfo= Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber
$DNSDOMAIN= (Get-WmiObject -Namespace root\cimv2 -Class Win32_ComputerSystem).Domain
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($DNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()Для отладки можно дополнительно вести лог файл скрипта PowerShell. - Нажмите кнопку Add и добавьте новый скрипт с параметрами:
Script name:FillCompDesc.ps1
Script Parameters:-ExecutionPolicy Bypass
В данном случае для запуска PowerShell скрипта вам не придется изменять настройки политики выполнения скриптов или подписывать PowerShell скрипт цифровой подписью. - Делегируйте в нужном OU доменной группе Authenticated Users право на изменение атрибута Description у всех объектов Computer (право Write Description). Это разрешить пользователям и компьютерам домена изменять значение в параметре Description;
- После обновления GPO и перезагрузки компьютеров в целевой OU у них будет автоматически заполнено поле Description в AD. В этом поле будет содержаться информация о модели компьютера.Диагностика применения GPO с помощью утилиты gpresult описана здесь и в статье Почему не применяется групповая политика к компьютеру.
Таким образом вы можете внести в поле Описание компьютера в AD любую информацию. Например, имя последнего пользователя, название структурного подразделения (эти данные можно получить с помощью командлета Get-ADUser), IP адрес компьютера или любую другую нужную вам информацию.
Добавить имя пользователя в описание компьютера
Рассмотренный выше скрипт можно использовать для добавления любой другой информации в описание компьютера в AD. Например, удобно когда в описании компьютера указан текущий пользователь, выполнивший вход. Также добавим имя контроллера домена, на которым выполнена аутентификация (LOGONSERVER).
Измените в логон скрипте PowerShell строку на:
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
Выполните логофф/логон и проверьте, что теперь в описании компьютера показывается имя текущего пользователя и контроллер домена, через который выполнен вход.
Чтобы разобрать данные из атрибута Description можно использовать такой PowerShell код:
$ComputerName = 'WKS-PC11S22'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
Мы сохранили каждое из значений поля Description (разделенные
|
) в отдельную переменную. Чтобы вывести имя пользователя на указанном компьютере, достаточно выполнить:
$Username
А чтобы найти компьютера домена, на которым сейчас залогинен определенный пользователь, можно использовать такой PowerShell скрипт:
$user='*kbuldogov*'
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft