Автоматическое добавление полезной информации в описание компьютеров в 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

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

Такой скрипт обновит данные в 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 rootcimv2 -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
      В данном случае для запуска PowerShell скрипта вам не придется изменять настройки политики выполнения скриптов или подписывать PowerShell скрипт цифровой подписью .

    6. Делегируйте в нужном OU доменной группе Authenticated User s право на изменение атрибута Description у всех объектов Computer (право Write Description ). Это разрешить пользователям и компьютерам домена изменять значение в параметре Description;
    7. После обновления 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

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago