SC ManagerMap
Оргструктура из поля Manager в AD
- AD
- Оргструктура
- CSV
Загружаем интерфейс…
SC AD Hygiene находит объекты, которые засоряют каталог: учётные записи без входа больше заданного срока, отключённые компьютеры, пароли без срока действия и пустые группы.
Конструктор работает прямо в браузере: вы задаёте параметры, а он собирает готовый скрипт PowerShell. Данные домена не покидают вашу сеть — скрипт запускается на вашем сервере и сохраняет отчёт в CSV.
Пользователи и компьютеры без входа дольше N дней с учётом lastLogonTimestamp.
Учётные записи с флагом PasswordNeverExpires — частая находка аудита.
Группы без участников, которые остались после миграций и проектов.
Результат сразу открывается в Excel и прикладывается к заявке на очистку.
Скрипт только читает каталог. Отключение и удаление объектов остаётся решением администратора.
Нет. Он использует только командлеты Get-* и Search-ADAccount и сохраняет результат в файл.
lastLogonTimestamp реплицируется между контроллерами домена, поэтому одного запроса достаточно. Точность — до 14 дней, для поиска неактивных объектов этого хватает.
Оргструктура из поля Manager в AD
Источник блокировок и неудачных входов
Шаблоны заявок и SLA для Service Desk
#Requires -Modules ActiveDirectory
# SC AD Hygiene — аудит Active Directory. Скрипт только читает каталог.
# https://shmonovstudio.ru/tools/sc-ad-hygiene
Import-Module ActiveDirectory
$Days = 90
$Inactive = New-TimeSpan -Days $Days
$Report = Join-Path 'C:\Reports' ("ad-hygiene-" + (Get-Date -Format 'yyyy-MM-dd'))
New-Item -ItemType Directory -Path $Report -Force | Out-Null
$Base = @{}
$Csv = @{ NoTypeInformation = $true; Encoding = "UTF8" }
# Неактивные пользователи
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan $Inactive @Base |
Where-Object Enabled |
Select-Object Name, SamAccountName, LastLogonDate, DistinguishedName |
Export-Csv (Join-Path $Report "inactive-users.csv") @Csv
# Неактивные компьютеры
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan $Inactive @Base |
Where-Object Enabled |
Select-Object Name, LastLogonDate, DistinguishedName |
Export-Csv (Join-Path $Report "inactive-computers.csv") @Csv
# Пароли без срока действия
Get-ADUser -Filter 'PasswordNeverExpires -eq $true -and Enabled -eq $true' -Properties PasswordLastSet @Base |
Select-Object Name, SamAccountName, PasswordLastSet, DistinguishedName |
Export-Csv (Join-Path $Report "password-never-expires.csv") @Csv
# Пустые группы
Get-ADGroup -Filter * -Properties Members @Base |
Where-Object { -not $_.Members } |
Select-Object Name, GroupScope, GroupCategory, DistinguishedName |
Export-Csv (Join-Path $Report "empty-groups.csv") @Csv
Get-ChildItem $Report -Filter *.csv | ForEach-Object {
"{0,-32} {1,6} строк" -f $_.Name, ((Import-Csv $_.FullName | Measure-Object).Count)
}
Write-Host "Отчёт сохранён: $Report"LastLogonDate основан на lastLogonTimestamp и отстаёт до 14 дней — для поиска неактивных объектов этого достаточно.