PowerShell · 11.09.2026

Весь список, пожалуйста

Чуть раньше мы уже беседовали на эту тему, но тогда скрипт получал данные о конкретном пользователе. Сегодня пройдемся по всему списку пользователей в подразделении и скажем точно о том, кто заблокирован, а кто нет.

Я выбросил из прошлого скрипта модуль 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

Установка модулей может затянуться, так что лучше поставить чайник и запастись провиантом.