Чуть раньше мы уже беседовали на эту тему, но тогда скрипт получал данные о конкретном пользователе. Сегодня пройдемся по всему списку пользователей в подразделении и скажем точно о том, кто заблокирован, а кто нет.
Я выбросил из прошлого скрипта модуль ActiveDirectoryObjectPicker и заменил его на поиск пользователей в заданном подразделении. Дальнейшая логика осталась такой же: получить время блокировки учётной записи и прибавить к нему заданный политикой период.
Из того, что получили строим таблицу:
## Заголовок консоли ##
[System.Console]::Title = "Таблица блокировки пользователей"
## Переменная с подразделением в AD ##
$domainou = "OU=Users,OU=Management,DC=domain,DC=local"
## Получение времени блокировки из политик домена ##
$unlockPolicyDuration = (Get-ADDefaultDomainPasswordPolicy).LockoutDuration.TotalMinutes
## Получение данных пользователей и построение таблицы ##
Get-ADUser -Filter * -SearchBase $domainou -Properties Name, sAMAccountName, LockedOut, LockoutTime |
Select-Object @{Name="ФИО"; Expression={$_.Name}},
@{Name="Логин"; Expression={$_.sAMAccountName}},
@{Name="Статус блокировки"; Expression={
if ($_.LockedOut) { "Заблокирован" } else { "Разблокирован" }
}},
@{Name="Время блокировки"; Expression={
if ($_.LockoutTime) {
[datetime]::FromFileTime($_.LockoutTime)
} else {
$null
}
}},
@{Name="Примерное время разблокировки"; Expression={
if ($_.LockedOut -and $_.LockoutTime) {
([datetime]::FromFileTime($_.LockoutTime)).AddMinutes($unlockPolicyDuration)
} else {
$null
}
}} | Sort-Object -Property "ФИО" | Format-Table -AutoSize
## Ожидание действия пользователя ##
Read-Host "Нажмите Enter для выхода..."
Дальше с этими данными можно делать всё, что угодно: залить в текстовый файл, сформировать json или сделать html-страничку и скормить её HTTPub.
Разумеется, для полноценной работы скрипта нужно установить RSAT:
Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability –Online
Установка модулей может затянуться, так что лучше поставить чайник и запастись провиантом.