Автоматизация — скрипт выключения ПК с уведомлением

Решили отрыть Вам исходники скриптов, которыми пользуемся достаточно давно и писались исключительно с целью автоматизации различных процессов.

В данной статье выложим скрипт, который собирает все ПК с домена, фильтрует исключения групп, пингует на доступность, тушит ПК домена и отправляет отчет на указанные емэйл. Скрипт работает автоматически годами без сбоев и нареканий. Писался исключительно, чтобы не создавать задачи в шедулере на компах юзеров, чтобы не плодить батники и другую пурговую софтню, а все центролизованно с отчетами для руководства. Читайте коментарии скрипта и меняйте на свой домен и группы. Так и сразу, у кого есть свои наработки, кто любит софт и другой анонизм — просим без комментариев.

30253

Сам powershell скрипт:

####################################################
# Shutdown_WORK!.ps1 27/05/2015 PowerShell v3-4 made by ®securixy
# Скрипт выключения ПК с отправкой отчета на мыльники.
# Данный скрипт собирает все ПК с домена, фильтрует исключения групп, пингует на доступность,тушит ПК и отправляет отчет на указанные емэйл
####################################################

# Собираем ПК и фильтруем группу исключения
$comps = Get-ADObject -LDAPFilter '(&(objectCategory=computer)(&(!memberOf=CN=AlwaysOnlineWorkstations,OU=ServiceAccounts,DC=yourcompany,DC=kz)))' -SearchBase 'OU=alldomain,DC=yourcompany,DC=kz' | Select -Expand Name
# Выводной файл для отчетности
$DT=get-date -Format dd.MM.yyyy
$DTM=Get-Date -Format F
$file = New-Item -itemtype file "C:\1\LOGS\Computers_ON_$DT.html" -Force
$nb=1
# Туловище HTML
Add-Content $file '<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
<title>Статус ВКЛюченных компьютеров</title>
<style type="text/css">
BODY{background-color:#FFFFFF;}
TABLE{border-width: 1px;border-style: solid;border-color: black;}
TH{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:#1D92DC}
TD {border-width: 1px;padding: 2px;border-style: solid;border-color: black;background-color:#94BFE4}
TR {color:#000000;font-family:Tahoma;font-size:10pt;} }
</style>
<p>Отчет сформирован: '
Add-Content $file " $DTM.</p>
<h2>Перечень включенных ПК после 22:00</h2>
<i>В случае необходимости - возможно автоматически выключать данные ПК</i>
<table>
<tr><th> № </th><th> Посл. пользователь: </th><th> ПК в сети:</th></tr>"

# Цикл выключения ПК домена с пингом с подкрашиванием HTML таблицы
foreach ($comp in $comps)
{$ON = Get-WmiObject Win32_PingStatus -filter "Address=""$comp"""
if ($ON.StatusCode -eq 0) {$desc = Get-ADObject -LDAPFilter "(cn=$comp)" -Properties Description | Select -Expand Description | Out-String
#TurnOFF
Stop-Computer -cn $comp -force -ea 0
#Restart
#Restart-Computer $comp -force
Add-Content $file "<tr><td> $nb </td><td>$desc</td><td style='background-color:red; color:Yellow;'><strong>$comp Включен!</strong></td></tr>"
$nb= $nb + 1 }
# Если необходимо в отчете видеть все ПК, в т.ч. уже отключенные - откоменьтить условие если
#Else
#{$desc = Get-ADObject -LDAPFilter "(cn=$comp)" -Properties Description | Select -Expand Description | Out-String
#Add-Content $file "<tr><td>$desc</td><td style='background-color:green; color:#FFFFFF;'>$comp выключен</td></tr>"}}
Add-Content $file "</html>"
# Вложение тела HTML файла
$html = Get-Content $file -raw
# мЁльнер
Send-MailMessage -smtpServer mx.yourcompany.kz -from '[email protected]' -to '[email protected]' -subject "Вкл.Компьютеры $DT" -body $html -Encoding UTF8 -BodyAsHTML -Attachment $file

Пример отчета:

30277

Всем кому помогло решить повседневную проблему и контроллировать процесс, всегда пожалуйста. Следующий пост будет об автоматизации сбора простых паролей пользователей с домена с отправкой им на мыло гневного письма аля культура парольной политики в рамках регламента или ВНД…