Сценарий 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.
Если вам здесь ничего не нужно, я бы предложил прояснить ваш вопрос. Надеюсь, это поможет.