Сценарий Powershell для поиска определенного подразделения в AD и поиска отключенных пользователей, входящих в группу

Я пытаюсь написать сценарий для поиска отключенных пользователей, которые входят в одну или несколько групп в определенном подразделении в AD. Затем он удалит все группы для всех отключенных пользователей. Я нашел этот сценарий, который удаляет все группы из пользователей в файле csv, но, поскольку я хочу запустить его как запланированную задачу, я предпочитаю не обрабатывать пользователей, у которых уже были удалены их группы, без необходимости перемещать их в другое подразделение.

Import-Csv $csvFile | ForEach-Object {
    # Disable the account
    Disable-ADAccount -Identity $_.samAccountName
    # Retrieve the user object and MemberOf property
    $user = Get-ADUser -Identity $_.samAccountName -Properties MemberOf
    # Remove all group memberships (will leave Domain Users as this is NOT in the MemberOf property returned by Get-ADUser)
    foreach ($group in ($user | Select-Object -ExpandProperty MemberOf))
    {
        Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false
    }
}

Любая идея о том, как отфильтровать пользователей с более чем одной группой? Я использую этот скрипт для экспорта отключенных пользователей, которые не вошли в систему в течение 60 дней:

Get-QADUser -searchRoot $OuDomain -searchScope OneLevel -InactiveFor 61 -NotLoggedOnFor 61 -disabled -sizelimit 0

Спасибо

1 ответ

Решение

Кажется, у вас есть фильтр по частям, что хорошо. В начале публикации у вас есть некоторые мысли, но единственный реальный вопрос - как отфильтровать пользователей с более чем одной группой. Не уверен, что это опечатка или нет, но я прочитал это как проверку количества групп, которые есть у пользователя. Более реалистичной интерпретацией этого является фильтр пользователей, который может иметь хотя бы одну из списка групп. Я собираюсь покрыть оба.

Счет

Я уверен, что это не то, что вы хотите, а просто хотите покрыть базу. Следующее также будет работать в Where-Object пункт

If((get-aduser $user -Properties MemberOf).MemberOf.Count -gt 0){Process...}

Несколько групп

Я уверен, что это было твоим намерением. Найдите пользователей, которые могут содержать одну из нескольких групп. Это лучше всего обрабатывается с помощью регулярных выражений.

$groupsFilter = "citrix_GateKeeper","barracuda_spam_alerts"
$groupsFilter = "($($groupsFilter -join '|'))"
# $groupsFilter in this example is: (citrix_GateKeeper|barracuda_spam_alerts)

If(((Get-ADUser $user -Properties MemberOf).MemberOf) -match $groupsFilter){Process....}

Создайте строку соответствия регулярному выражению на основе массива строк из нескольких групп. Если $user является членом какой-либо из этих групп, то будет возвращено значение true.

Если вам здесь ничего не нужно, я бы предложил прояснить ваш вопрос. Надеюсь, это поможет.

Другие вопросы по тегам