Автоматическое добавление полезной информации в описание компьютеров в Active Directory

В описании объектов типа “Компьютер” в 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

Get-WMIObject - получаем модель и серийный номер компьютера

Теперь нужно сохранить эти данные в поле 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()

Также вы можете внести изменения в описание компьютера с помощью Powershell командлета Set-ADComputer. Однако для этого на компьютере должен быть установлен модуль ActiveDirectory для Windows PowerShell (устанавливается из набора компонентов RSAT — Remote Server Administration Tools).
Если вы хотите использовать именно командлеты из модуля AD PowerShell, вы можете скопировать файлы модуля на все компьютеры без установки RSAT.

Проверьте, что в поле Описание компьютера в консоли AD появились данные о производителе и модели.

Заполненное поле Description у компьютера в AD

Такой скрипт обновит данные в AD только для одного компьютера. Можно удаленно заполнить данные для всех компьютеров в домене с помощью Get-ADComputer и цикла foreach, но гораздо удобнее чтобы компьютеры автоматически при загрузке обновляли свою информацию в AD.

Для этого нужно создать групповую политику с PowerShell логон скриптом и назначить ее на все компьютеры:

  1. Откройте консоль управления доменными GPO (gpmc.msc), создайте новую политику и назначьте ее на OU с компьютерами;
  2. Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Scripts (Logon / Logoff) -> Logon;
  3. Перейдите на вкладку PowerShell Scripts;
  4. Нажмите кнопку 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.
  5. Нажмите кнопку Add и добавьте новый скрипт с параметрами:
    Script name: FillCompDesc.ps1
    Script Parameters: -ExecutionPolicy Bypass gpo powershell скрипт для добавления информации в описание компьютера в Active Directory

    В данном случае для запуска PowerShell скрипта вам не придется изменять настройки политики выполнения скриптов или подписывать PowerShell скрипт цифровой подписью.
  6. Делегируйте в нужном OU доменной группе Authenticated Users право на изменение атрибута Description у всех объектов Computer (право Write Description). Это разрешить пользователям и компьютерам домена изменять значение в параметре Description;active directory делегировать пользователям права на запись в поле описание компьютера
  7. После обновления GPO и перезагрузки компьютеров в целевой OU у них будет автоматически заполнено поле Description в AD. В этом поле будет содержаться информация о модели компьютера.
    Диагностика применения GPO с помощью утилиты gpresult описана здесь и в статье Почему не применяется групповая политика к компьютеру.
  8. Таким образом вы можете внести в поле Описание компьютера в AD любую информацию. Например, имя последнего пользователя, название структурного подразделения (эти данные можно получить с помощью командлета Get-ADUser), IP адрес компьютера или любую другую нужную вам информацию.

    Добавить имя пользователя в описание компьютера

    Рассмотренный выше скрипт можно использовать для добавления любой другой информации в описание компьютера в AD. Например, удобно когда в описании компьютера указан текущий пользователь, выполнивший вход. Также добавим имя контроллера домена, на которым выполнена аутентификация (LOGONSERVER).

    Измените в логон скрипте PowerShell строку на:

    $computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")

    Выполните логофф/логон и проверьте, что теперь в описании компьютера показывается имя текущего пользователя и контроллер домена, через который выполнен вход.

    добавить имя пользователя в описание компьютера в Active Directory

    Чтобы разобрать данные из атрибута Description можно использовать такой PowerShell код:

    $ComputerName = 'WKS-PC11S22'
    $vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity  $ComputerName -Properties *).description).split("|")

    Мы сохранили каждое из значений поля Description (разделенные | ) в отдельную переменную. Чтобы вывести имя пользователя на указанном компьютере, достаточно выполнить:

    $Username

    разобрать поле описание компьютера комадой powershell

    А чтобы найти компьютера домена, на которым сейчас залогинен определенный пользователь, можно использовать такой PowerShell скрипт:

    $user='*kbuldogov*'
    Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft

    найти за каким компьютером работает пользователь active directory


Предыдущая статья Следующая статья


Комментариев: 12 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)