PowerShell · 17.01.2025

Кто у Вас тут новенький?

Поводом для написания этого скрипта послужил продолжительный отпуск, по окончании которого выяснилось, что в Active Directory появились новички. Делать однострочный запрос и копаться в выводе консоли — скучно, так что я решил создать генератор отчёта и в подобных ситуациях обращаться к нему.

За стартовый период отбора я взял 30 дней, а в качестве таблицы стилей применил свой стандартный набор с табличкой.

## Начало периода отбора ##
$days = ((Get-Date).AddDays(-30))

## Формат вывода ##
$formatdays = $days.ToString("dd.MM.yyyy")

## Данные для заголовка ##
$phrase = "Созданные пользователи с $formatdays"

## Заголовок окна консоли  ##
[System.Console]::Title = $phrase

## Оформление вывода в HTML ##
$header = @"
<title>Отчёт о созданных пользователях за месяц</title>
<style>
  TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse; width: 100%;}
  TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #87cefa;} 
  TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
  H1 {text-align: center;}
  H2 {text-align: right;}
</style>
"@

## Получение списка пользователей ##
$getusers = Get-ADUser -filter {(whencreated -ge $days)} `
            -Properties Enabled, Name, mail, SamAccountName, SID, WhenCreated | 
            Select-Object `
            @{Label="Дата создания"; Expression={$_.WhenCreated}},` 
            @{Label="Статус"; Expression={$_.Enabled}},`
            @{Label="Имя пользователя"; Expression={$_.Name}},`
            @{Label="Электронная почта"; Expression={$_.mail}},`
            @{Label="Логин"; Expression={$_.SamAccountName}},`
            @{Label="SID"; Expression={$_.SID}} |
            Sort-Object "Дата создания"

## Подсчёт количества пользователей ##
$count = ($getusers).count

## Вывод отчёта в HTML ##
$getusers | ConvertTo-Html -Head $header `
            -PreContent "<H1>$phrase</H1>" `
            -PostContent "<H2>Итого пользователей: $count</H2>" |
            Out-File aduserreport.html -Verbose

Всего в табличке 6 столбцов и присутствует сортировка по дате создания. В дальнейшем планирую добавить данные о размещении объекта, немного подкорректировать код и собрать exe файл для облегчения работы.

Скрипт можно немного доработать, подружить с HTTPub и всегда иметь актуальный отчёт о новичках в домене.

Внезапный UPD, если Вам только делегировали часть полномочий администратора на какой-то отдельный OU…

Делать отдельный скрипт для этого смысла не вижу. Достаточно отредактировать то, что уже сказано выше. Например, можно добавить переменную $ouPath и объявить её в качестве SearchBase для Get-ADUser:

## Укажите здесь путь к нужному подразделению AD ##
$ouPath = "OU=OrganizationalUnit,DC=domain,DC=local"

## Получение списка пользователей ##
$getusers = Get-ADUser -Filter {(whenCreated -ge $days)} `
            -SearchBase $ouPath `
            -Properties Enabled, Name, mail, SamAccountName, SID, WhenCreated |
            Select-Object `
            @{Label="Дата создания"; Expression={$_.WhenCreated}},` 
            @{Label="Статус"; Expression={$_.Enabled}},`
            @{Label="Имя пользователя"; Expression={$_.Name}},`
            @{Label="Электронная почта"; Expression={$_.mail}},`
            @{Label="Логин"; Expression={$_.SamAccountName}},`
            @{Label="SID"; Expression={$_.SID}} |
            Sort-Object "Дата создания"

При таком подходе, вероятно, не будет работать счётчик количества пользователей, но это уже детали.