Выбирать пользователей из AD случайно - PullRequest
2 голосов
/ 19 апреля 2019

Перед нами была поставлена ​​задача создать процесс для проверки веб-трафика случайных сотрудников на ежеквартальной основе. Я запустил скрипт в Powershell, который выбирает 10 случайных пользователей из определенного подразделения, но я все еще получаю некоторые ненужные данные. Мне нужна помощь в дальнейшей фильтрации списка. Вывод дает мне пользователей, которые были отключены и оставлены в OU, а также сотрудников PRN, которые не входили в систему в течение длительного времени. Я хотел бы найти учетные записи AD, которые имеют адрес электронной почты и имя входа, измененные в течение последних 3 месяцев. Вот пример кода, который у меня есть.

Get-ADUser -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" -Filter * | Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

[Редактировать: Ответ на вопрос]

Вот мой последний скрипт, добавленный $_.passwordlastset в качестве атрибута поиска, так как он будет забирать пользователей, которые изменили свой пароль за последние 90 дней.

$DateFrom = (get-Date).AddDays(-90)

Get-ADUser -Properties * -Filter {enabled -eq $True} -SearchBase "ou=ouname,dc=domainname,dc=suffix" | where { $_.passwordlastset -gt $DateFrom -and $_.mail -ne $null } | Sort-Object {Get-Random} | select name, sAMAccountName -First 10

Ответы [ 4 ]

2 голосов
/ 19 апреля 2019

Get-ADUser -Properties name, mail, lastlogondate -Filter {enabled -eq $True} -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" | select name, mail, lastlogondate | where { $_.lastlogondate -gt (Get-Date).AddDays(-90) -and $_.mail -ne $null }

Вот начало.

2 голосов
/ 19 апреля 2019

Попробуйте это:

$timeFrame = (get-Date).AddDays(-90)

get-aduser -SearchBase 'ou=ouname,ou=ouname,dc=domainname,dc=suffix' -Filter * -Properties * | 
    Where-Object {$_.whenChanged -gt $timeFrame -and $_.mail -ne $null} |
    Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10
1 голос
/ 19 апреля 2019

Это будет делать все, что указано в OP:

$timeFrame = (get-Date).AddDays(-90)
get-aduser -SearchBase 'YourOU,DC=Domain,DC=com' -Filter * -Properties * | 
Where-Object {$_.whenChanged -lt $timeFrame -and $_.mail -ne $null -and $_.Enabled -eq $true} |
Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

Это должно соответствовать всем контрольным точкам OP с помощью фрагментов:

"Я хочу выполнить поиск учетных записей AD, имеющих адрес электронной почты"$_.mail -ne $null

" & вход в систему "$_.Enabled -eq $true

", измененный за последние 3 месяца "$_.whenChanged -lt $timeFrame

1 голос
/ 19 апреля 2019

Изменить значение -Filter:

# LastLogontimeStamp is not guaranteed to be updated on every login, so 30 days + 14 days margin
$threshold = (Get-Date).AddDays(-44).ToFileTime()
Get-ADUser -Filter {Enabled -eq $true -and LastLogontimeStamp -gt $threshold} -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" | Sort-Object {Get-Random} | Select Name -First 10

Этот фильтр гарантирует, что AD возвращает только активных пользователей и что их значение lastLogontimeStamp было обновлено в течение последних полутора месяцев

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...