В описании объектов типа “Компьютер” в 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
У меня запрос сразу при первой команде Get-WMIObject Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber ничего не возвращает!
System manufacturer System Product Name System Serial Number
Второй пример с выгрузкой компов из ад не работает.
Очень инфомативно :). Давайте попробуем разбраться с проблемой. Нужна все-таки более подробная инфа.
О какой команде речь, какая ошибка и какая у Вас ОС?
Уже разобрался).
Import-Module ActiveDirectory
$computers = Get-ADComputer -Filter * -searchBase "OU=Computers,OU=MSK,DC=domain,DC=loc"
foreach ($computer in $computers)
{
$vendor = (Get-WMIObject -ComputerName $computer.name Win32_ComputerSystemProduct).Vendor
$name = (Get-WMIObject -ComputerName $computer.name Win32_ComputerSystemProduct).Name
$identifyingNumber = (Get-WMIObject -ComputerName $computer.name Win32_ComputerSystemProduct).identifyingNumber
Set-ADComputer $computer.name –Description “$vendor : $name : $identifyingNumber”
}
Если брать имя переменной $computer, то скрипт не отработает. Нужно указывать $computer.name
И да. win 7 x64.
Ошибку будет выдавать что недоступен сервер rpc, если смотреть в дебаг то видно, что ломится на комп с именем вида CN=COMP52,OU=Computers,OU=123,DC=12312,DC=loc, т.е. возьмет самую первую строку DistinguishedName.
«предполагается, что этот модуль уже установлен из пакета RSAT»
В даном варианте для логон-скрипта предлагается на каждый робоий комп устанавливать RSAT? — такое себе.. Безопасники не оценят что б на каждом компе были в меню пуск консольки Active Directory Users and Computers и прочие. Та и зачем менеджеру Ваське из торгового отдела это все на компе устанавливать.
Вот бы вариант получить только сами модули ActiveDirectory для PowerShell в Windows 10….
Установка модуля «ActiveDirectory для Windows PowerShell» не предполагает обязательной установки оснастки ADUC (dsa.msc) и прочих консолей для просмотра и управления AD. Она может ставится отдельно. Т.е. ставите на компьютер RSAT, но включаете только модуль PoSH (если уж таки боитесь Васьки, который увидит структуру вашего домена 🙂 ).
Так например:
dism /online /enable-feature /featurename:RemoteServerAdministrationTools-Roles-AD-Powershell
dism /online /enable-feature /featurename:RemoteServerAdministrationTools-Roles-AD-Powershell
В windows 10 v1809 к сожалению не работает:
Error: 0x800f080c
Feature name RemoteServerAdministrationTools-Roles-AD-Powershell is unknown.
A Windows feature name was not recognized.
Use the /Get-Features option to find the name of the feature in the image and try the command again.
в 1809 знаю консольки теперь включаются через add-windowscapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 и другие, но тем нету отдельно установить только модули Powershell
Все верно, в Windows 10 1809 немного изменился подход к RSAT. https://winitpro.ru/index.php/2018/10/04/ustanovka-rsat-v-windows-10-iz-powershell/ Не знаю, можно ли ставить отдельно модуль PoSh AD.
Добрый вечер. Подскажите, пожалуйста.
В какие ещё поля кроме «описания» и другие стандартные поля типо телефон, организация и т. д. можно добавить кастомные данные? И при этом не менять схему АД.
Мне кажется, я видел в свойствах объектов АД что-то типо custom filed 1, custom filed 2 и т. д.
К примеру, я хочу добавить пути к 1С базам. Правда все руки никак не дойдут скрипт написать 😅
Вам подойдут extensionAttribute1-15
Большое спасибо.
доброго дня
$vendor
$name
$identifyingNumber
HP
HP ProOne 400 G5 20.0-in All-in-One
8C123BW6
Если добавить получается
HP HP ProOne 400 G5 20.0-in All-in-One 8C1230BW6
можно конечно обрезать знаки но с каждым поколенью и моделью у НР меняются психи в названии. правильнее выгружать всё в файл а потом автозаменой пройтись. как выгрузить правильно.