
Вы можете хранить различную полезную информацию в описании компьютерных объектов в Active Directory. Например, информацию о модели компьютера, инвентаризации оборудования или имени последнего вошедшего в систему пользователя. В этой статье мы рассмотрим, как автоматически заполнять и обновлять информацию в Описание поле компьютерных объектов в Active Directory с помощью PowerShell.
Обновление поля описания компьютера в Active Directory с помощью PowerShell
Например, вы хотите, чтобы в поле Description для компьютеров и серверов в консоли Active Directory Users and Computers отображалась информация о производителе, модели и серийном номере компьютера. Вы можете получить эту информацию на локальной машине из WMI с помощью следующей команды PowerShell:
Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber
Запрос WMI возвращает следующие данные:
- Вендор — HP
- Имя — Proliant DL 360 G5
- IdentifyingNumber — CZJ733xxx
Получите имя текущего компьютера из переменной окружения и присвойте его параметру $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()
Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”
Убедитесь, что в поле Описание компьютера в консоли ADUC отображается информация о производителе и модели.
Такой сценарий будет обновлять только текущий атрибут описания компьютера в AD. Вы можете удаленно заполнить описания для всех компьютеров домена с помощью Get-ADComputer и foreach
цикл. Но гораздо удобнее, чтобы компьютеры автоматически обновляли свою информацию в AD, когда пользователь входит в систему или компьютер загружается.
Для этого нужно создать групповую политику со сценарием входа в систему PowerShell и применить ее ко всем компьютерам:
- Откройте консоль управления групповой политикой домена (
gpmc.msc
), создайте GPO и назначьте его OU с компьютерами; - Разверните GPO: Конфигурация пользователя -> Политики -> Параметры Windows -> Сценарии (вход/выход) -> Вход в систему;
- Перейдите в раздел Сценарии PowerShell вкладка;
- Нажмите на кнопку Показать файлы кнопку и создайте FillCompDesc.ps1 файл со следующим кодом:
# write information about the computer hardware/model in the Description field in Active Directory
$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. - Нажмите кнопку Добавить кнопку и установите следующие параметры сценария:
Имя скрипта:FillCompDesc.ps1
Параметры сценария:-ExecutionPolicy Bypass
В этом случае вам не нужно изменять параметры политики выполнения PowerShell или подписывать файл сценария PS1 для запуска сценария PowerShell. - Делегирование разрешений AD на определенную OU для Аутентифицированный Пользователидоменная группа. Назначьте права на изменение атрибута Description всех объектов Computer в OU (группа
Write Description
разрешение). Это позволит пользователям и компьютерам домена изменять значение в атрибуте Description объектов компьютера; - После перезапуска компьютеров в целевой OU и обновления параметров групповой политики поле Description в AD будет заполнено автоматически. Это поле будет содержать информацию об аппаратном обеспечении компьютера.
Вы можете устранить неполадки в GPO, используя
gpresult
или воспользоваться советами из статьи Общие проблемы, из-за которых групповая политика не применяется.
Таким образом, вы можете добавить любую информацию в поле Description компьютерных объектов в AD. Например, имя последнего вошедшего в систему пользователя, отдел (эту информацию можно получить с помощью команды Get-ADUser), IP-адрес компьютера или любую другую необходимую информацию.
Добавление имени пользователя, вошедшего в систему последним, в описание компьютера в AD
Приведенный выше сценарий PowerShell можно использовать для добавления любой другой информации в описание объектов компьютера в AD. Например, это полезно, когда в описании компьютера отображается текущий вошедший в систему пользователь. Давайте также добавим имя контроллера домена, на котором аутентифицирован пользователь (LOGONSERVER
).
Измените одну строку в сценарии входа в систему PowerShell на:
$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")
Выйдите из системы и войдите под своей учетной записью пользователя. Убедитесь, что атрибут описания компьютера теперь показывает имя текущего пользователя и сервера регистрации (контроллера домена), на котором вы аутентифицировались.
Чтобы разобрать данные из атрибута Description, можно использовать следующий код PowerShell:
$ComputerName="PC-MUN22s7b2"
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity $ComputerName -Properties *).description).split("|")
Мы разбиваем значение поля Description (разделенное | ) в несколько отдельных переменных. Чтобы получить имя пользователя на указанном удаленном компьютере, просто выполните команду:
$Username
Вы можете получить имя компьютера, на котором в данный момент зарегистрирован определенный пользователь, с помощью следующего сценария PowerShell:
$user="*M.Becker*"
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft