Поскольку вы используете оператор -like
без символов wilcard, вы не получите никакой выгоды от использования -like
. При сравнении одного значения с коллекцией следует рассмотреть использование оператора -in
. Однако операторы сравнения содержания , такие как -in
и -contains
, не поддерживаются в -filter
командлетов ActiveDirectory. Вам остается либо перебирать свои коллекции и использовать -filter
для сравнения отдельных значений, либо полагаться на Where-Object , который поддерживает все операторы сравнения.
Get-ADGroupMember и Параметр Remove-ADGroupMember -Members
поддерживает массивы. Если вы создаете массив пользователей, которого хотите добавить или удалить, вы можете выполнить добавление / удаление одной командой.
$Descriptions = @("Supporter","System Eng", "etc.","etc.")
$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"
$UsersToAdd = Get-ADUser -Filter "MemberOf -ne '$($group.DistinguishedName)'" –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" -properties MemberOf,Description |
where Description -in $Descriptions
$UsersToRemove = Get-ADUser -Filter "MemberOf -eq '$($group.DistinguishedName)'" -properties MemberOf,Description |
where Description -notin $Descriptions
Add-ADGroupMember $group -Members $UsersToAdd
Remove-ADGroupMember $group -Members $UsersToRemove
Переключатель -Properties
позволяет выборочно выбирать свойства (в массивеформат для нескольких свойств и формат строки для одного свойства), который вы хотите отобразить. Я бы не рекомендовал использовать *
, так как это увеличит потребность в ресурсах в вашей системе во время запросов и поиска данных.
Примечание: Решение предполагает, что ваш массив $Descriptions
содержит точныеописания, которые вы ожидаете увидеть на объектах пользователя.
Если $Descriptions
содержит частичные строки , с которыми вы хотите сопоставить, вы можете выбрать использованиеоператор -match
. Вместо массива просто создайте одну строку с разделителями (|
).
$Descriptions = "Supporter|System Eng|etc\."
$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"
$UsersToAdd = Get-ADUser -Filter "MemberOf -ne '$($group.DistinguishedName)'" –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" -properties MemberOf,Description |
where Description -match $Descriptions
$UsersToRemove = Get-ADUser -Filter "MemberOf -eq '$($group.DistinguishedName)'" -properties MemberOf,Description |
where Description -notmatch $Descriptions
Add-ADGroupMember $group -Members $UsersToAdd
Remove-ADGroupMember $group -Members $UsersToRemove