Скрипт получения новых компьютеров в Active Directory
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали методы управления переменными средами Windows. В сегодняшней статье я хочу с вами поделиться полезным скриптом, который поможет вам в информировании на почту информации, о тех компьютерах которые были созданы за последнюю неделю или другой нужный вам период в Active Directory.
Постановка задачи
- Проверять базу данных Active Directory на предмет появившихся новых компьютеров, пусть это будет неделя
- Полученные данные формировать в виде таблицы
- Отправлять данные нужным получателям
- Вести лого выполнения скрипта
- Создать задачу в планировщике Windows и настроить расписание
PowerShell: Получения новых компьютеров в Active Directory
Вот полный текст скрипта.
function Date {Get-Date -Format "MM.dd.yyyy HH:mm:ss"}
# Указание папки с логами, если ее нет, то создаем
$log_folder = "$PSScriptRoot\Logs\" + $($MyInvocation.MyCommand.Name -replace (".ps1", ""))
$log = "$log_folder\$(Get-Date -Format "yyyy_MM_dd_HH_mm_ss").txt"
if (! (Test-Path $log_folder -PathType Container -ErrorAction SilentlyContinue))
{
New-Item $log_folder -ItemType D -Force | Out-Null
}
"$(Date) Start Processing" | Tee-Object $log -Append
$new_comps = Get-ADComputer -Filter * -Properties Name, DistinguishedName, Created | ? {$_.Created -ge (Get-Date).AddDays(-7) -and $_.Created -le (Get-Date)} # Сам запрос в Active Directory
#Если нужно делать запрос в разные домены, то можно обращаться к определенным контроллерам домена, вот пример
#$DC1 = "DC05.root.pyatilistnik.org"
#$DC2 = "dc01.new.pyatilistnik.org"
#$new_comps = @()
#$new_comps += Get-ADComputer -Filter * -Properties Name, DistinguishedName, Created, OperatingSystem -Server $DC1 | ? {$_.Created -ge (Get-Date).AddDays(-7) -and $_.Created -le (Get-Date) -and $_.OperatingSystem -like "*Windows Server*"}
#$new_comps += Get-ADComputer -Filter * -Properties Name, DistinguishedName, Created, OperatingSystem -Server $DC2 | ? {$_.Created -ge (Get-Date).AddDays(-7) -and $_.Created -le (Get-Date) -and $_.OperatingSystem -like "*Windows Server*"}
# Формирование вида таблицы в письме
$header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@
$body = $null
$body = $new_comps | select Name, DistinguishedName, Created | ConvertTo-Html -Head $header # Конвертирование письма в html формат
$body += "<p>Generated on $($env:COMPUTERNAME + "." + $((Get-WmiObject Win32_ComputerSystem).Domain))" # В письме будет ссылка откуда был сгенерирован скрипт
# задается список получателей и SMTP сервер
$from = "notify@techmail.pyatilistnik.org"
$to1 = "barboskin.g@pyatilistnik.org" # Первый получатель
$to2 = "sem@pyatilistnik.org" # "Второй получатель
$Subject = "New computers in pyatilistnik.org AD domain created this week" # Тема письма
$smtpserver = "techmail.pyatilistnik.org"
$secure = $true
$port = 587 # TLS, for SSL use 465
$username = "notify"
$password = '11111111111'
# Отправка письма получателям
$message = New-Object System.Net.Mail.MailMessage
$message.From = $from
$message.To.Add($to1)
$message.To.Add($to2)
$message.Subject = $Subject
$message.Body = $body
$message.IsBodyHtml = $true
$smtp = New-Object Net.Mail.SmtpClient($smtpserver)
try {
$smtp.Send($message)
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
}
"$(Date) End Processing" | Tee-Object $log -Append
Далее вы сохраняете данный скрипт в формат ps1 и запускаете его в планировщике. В результате выполнения вы получите письмо
В папке с логами вы найдете события по данному заданию.
Теперь вы всегда сможете получать актуальную информацию по новым компьютерам в Active Directory. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.