Удалить членство в группе AD на основе атрибута $ - PullRequest
0 голосов
/ 21 января 2020

Я работаю над второй частью сценария, который я делал. Оба относятся к атрибуту $, который может иметь значение M или N. Для любых пользователей в нашей организации со значением M первая часть скрипта добавит их в группу. Эта часть работает - у меня есть список заполненных членов, который кажется правильным.

Во второй части скрипта необходимо отсканировать членов этой группы на предмет тех, у кого теперь значение $ Attribute равно N, и затем следует удалить их из группы. У меня возникли проблемы с этой частью - в частности отключение этого пользовательского атрибута, чтобы заполнить рабочий список членов. Вот более или менее то, что я пытаюсь сделать, чтобы удалить членство.

import-module activedirectory
$notmems = @()
$notmems += get-adgroupmember -identity <groupname> | where-object{$_.extensionattribute6 -like 'N*'}
foreach ($notmem in $notmems) {remove-adgroupmember -identity appkronosmanagers -members $noman}

Что происходит: первая часть успешно вызывает членов группы и, по-видимому, заполняет их в массив. Компонент where-object не может распознать атрибуты рекламного объекта, или я просто называю их неправильно. Команда вернет список всех или никого. Я, в основном, возился с изменением - как на - не похоже на - не совпадение, надеясь, что мой лог c может быть ошибочным.

Заранее спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Как объяснил AdminOfThings , extensionAttribute6 не является частью объектов, возвращаемых командлетом Get-ADGroupMember, и вам придется использовать Get-ADUser для получения этого свойства.

Однако, согласно документам , параметр -Identity для Get-ADUser представляет собой один объект AD, а не массив. Параметр также может получить этот объект через конвейер. Это будет означать, что вы должны l oop просмотреть результаты Get-ADGroupMember и проверить свойство для каждого пользователя внутри этого l oop.

Надеюсь, что это поможет

$notmems = Get-ADGroupMember -Identity <groupname> | Where-Object {$_.objectClass -eq 'user'} | ForEach-Object {
    $_ | Get-ADUser -Properties extensionAttribute6 | Where-Object {$_.extensionAttribute6 -like 'N*'}
}

После удовлетворения с результатами в $notmems вы можете удалить их, используя

Remove-ADGroupMember -Identity <groupname> -Members $notmems
0 голосов
/ 21 января 2020

Вы можете сделать следующее:

$notmems = Get-ADGroupMember -Identity <groupname> |
    Get-ADUser -Property extensionAttribute6 | Where extensionAttribute6 -like 'N*'

Remove-ADGroupMember -Identity <groupname> -Members $notmems -WhatIf

Вам придется удалить переключатель -WhatIf, если вы удовлетворены предполагаемой операцией команды.

Объяснение:

Get-ADGroupMember возвращает ADPrincipal объектов с ограниченным набором свойств (distinguishedName, name, objectClass, objectGUID, SamAccountName, SID). Чтобы увидеть больше свойств, которые обычно ассоциируются с объектом ADUser, вы можете вызвать Get-ADUser.

Передача ADPrincipal, который является пользователем, в Get-ADUser -Property extensionAttribute6 возвращает объект ADUser со свойством по умолчанию, установленным плюс extensionAttribute6. Вы можете вернуть подмножество этих свойств с помощью Select-Object -Property Property1,Property2.

, поскольку Remove-ADGroupMember использует параметр -Identity для поиска группы и принимает набор ADPrincipal s для параметра -Members, нет l oop необходимо для удаления нескольких пользователей из одной группы.


Кроме того, $notmems = @() и $notmems += здесь не нужны. Если ваша команда возвращает несколько объектов, $notmems автоматически будет коллекцией или массивом с простым присваиванием $notmems =. Если вам всегда требуется коллекция, даже если один объект может быть возвращен, вы можете просто окружить команду @().

Если в вашей группе могут быть вложенные группы, вам может потребоваться обновить команду Get-ADGroupMember не выбрасывать ошибки при передаче в Get-ADUser:

Get-ADGroupMember -Identity <groupname> | Where objectClass -eq 'user' |
    Get-ADUser -Property extensionAttribute6 | Where extensionAttribute6 -like 'N*'
...