В показанном вами коде есть некоторые проблемы:
- Неправильный синтаксис фильтра ldap. Найти информацию здесь
- вы пытаетесь получить ВСЕ свойства от пользовательских объектов, где вам нужно всего лишь несколько
- нет теста, если группа найдена до настройки свойство описания пользователя
Это должно помочь:
$OUName = 'TheNameForTheOU'
# instead of the -Filter parameter, you can also use -LdapFilter "(name=$OUName)"
$DN = (Get-ADOrganizationalUnit -Filter "Name -eq '$OUName'").DistinguishedName
# find user objects inside the OU and take just the properties you need
# property DistinguishedName is always returned.
Get-ADUser -SearchBase $DN -Filter * -properties Company, Description | ForEach-Object {
# try and find the group by that name
$group = Get-ADGroup -Filter "Name -eq $($_.Company)" -Properties Description -ErrorAction SilentlyContinue
if ($group) {
Set-ADUser -Identity $_.DistinguishedName -Department $group.Description -WhatIf
}
else {
Write-Warning "Could not find a group called $($_.Company)"
}
}
Коммутатор -WhatIf
имеет код, который просто записывает в консоль, что произойдет . Свойство описания пользователя фактически не обновлено. Когда вы будете удовлетворены информацией, отображаемой в консоли, удалите -WhatIf
.