Добавление имени пользователя Last Logged On Username в описание компьютера в AD

Вы можете хранить различную полезную информацию в описании компьютерных объектов в 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

Get-WMIObject Win32_ComputerSystemProduct

Получите имя текущего компьютера из переменной окружения и присвойте его параметру $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. Однако для этого необходимо, чтобы на компьютере был установлен модуль Active Directory Module for Windows PowerShell (из набора инструментов администрирования RSAT).
Set-ADComputer $computer –Description "$vendor|$Model|$SerialNumber”

Убедитесь, что в поле Описание компьютера в консоли ADUC отображается информация о производителе и модели.

заполненный файл описания компьютера в каталоге active directory

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

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

  1. Откройте консоль управления групповой политикой домена (gpmc.msc), создайте GPO и назначьте его OU с компьютерами;
  2. Разверните GPO: Конфигурация пользователя -> Политики -> Параметры Windows -> Сценарии (вход/выход) -> Вход в систему;
  3. Перейдите в раздел Сценарии PowerShell вкладка;
  4. Нажмите на кнопку Показать файлы кнопку и создайте 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.
  5. Нажмите кнопку Добавить кнопку и установите следующие параметры сценария:
    Имя скрипта: FillCompDesc.ps1
    Параметры сценария: -ExecutionPolicy Bypass запуск сценария входа в систему powershell с помощью групповой политики
    В этом случае вам не нужно изменять параметры политики выполнения PowerShell или подписывать файл сценария PS1 для запуска сценария PowerShell.
  6. Делегирование разрешений AD на определенную OU для Аутентифицированный Пользователидоменная группа. Назначьте права на изменение атрибута Description всех объектов Computer в OU (группа Write Description разрешение). Это позволит пользователям и компьютерам домена изменять значение в атрибуте Description объектов компьютера;делегирование прав на запись описания компьютера в ad для группы пользователей auth
  7. После перезапуска компьютеров в целевой OU и обновления параметров групповой политики поле Description в AD будет заполнено автоматически. Это поле будет содержать информацию об аппаратном обеспечении компьютера.
    Вы можете устранить неполадки в GPO, используя gpresult или воспользоваться советами из статьи Общие проблемы, из-за которых групповая политика не применяется.

Таким образом, вы можете добавить любую информацию в поле Description компьютерных объектов в AD. Например, имя последнего вошедшего в систему пользователя, отдел (эту информацию можно получить с помощью команды Get-ADUser), IP-адрес компьютера или любую другую необходимую информацию.

Примечание. Недостатком этого подхода является то, что любой аутентифицированный пользователь AD может изменить или удалить описание любого компьютера в Active Directory.

Добавление имени пользователя, вошедшего в систему последним, в описание компьютера в AD

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

Измените одну строку в сценарии входа в систему PowerShell на:

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

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

показать имя зарегистрированного пользователя в файле описания компьютера в ADUC

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

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

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

$Username

получить имя пользователя из описания компьютера в активном каталоге с помощью powershell

Вы можете получить имя компьютера, на котором в данный момент зарегистрирован определенный пользователь, с помощью следующего сценария PowerShell:

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

Добавить комментарий

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