Поводом для написания этого скрипта послужил продолжительный отпуск, по окончании которого выяснилось, что в 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 "Дата создания"
При таком подходе, вероятно, не будет работать счётчик количества пользователей, но это уже детали.