Мониторинг рабочих станций и серверов
Скрипт для отслеживания состояния серверов и клиентских машин. Powershell
# Дата
$day = Get-Date
$day_f = Get-Date -format d
$d = $day.AddDays(-1)
# Имя компьютера
$server = hostname
$hostfile = Get-Content "C:\script\disk\hostlist.txt"
# Куда сохраняем файл
$file1 = "C:\script\disk\rezult\place-$day_f.html"
$file2 = "C:\script\disk\rezult\logs-$day_f.html"
# высчитывает свободное место на дисках и выводит значения только тех дисков, размер которых меньше 50Gb
Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" -computer $hostfile | Where-Object {$_.freespace/1gb -lt 50} | Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ConvertTo-Html -Title "Свободное место" | Out-File $file1
# Читаем логи, выводим ошибки
Get-EventLog -logname System -EntryType Error -ComputerName $hostfile -after $d | ConvertTo-html -Title "События Windows" -Property EventID, MachineName, UserName, Message, TimeWritten | Out-File $file2
$FileExists = Test-Path $file1, $file2
# проверяем наличие файла
If ($FileExists -eq "False") {
Write-Host "sending mail"
# Если есть. то создаем почтовое сообщение
$mail = New-Object System.Net.Mail.MailMessage
# Устанавливаем
$mail.From = New-Object System.Net.Mail.MailAddress("mail2@mail.ru")
$mail.To.Add("mail@mail.ru")
# Устанавливаем тему сообщения
$mail.Subject = "Информация собрана с сервера $server";
# Создаем тело сообщения из файла, в теле письма будет отображаться информация о дисках, у которых заканчивается свободное место
$mail.Body = Get-Content $file1
$mail.IsBodyHtml = $true
$mail.Attachments.Add($file2)
# Создаем почтовое сообщение
$smtp = New-Object System.Net.Mail.SmtpClient
# Указываем хост через который будем отправлять
$smtp.host = "mail.ru"
# Задаем пользователя от имени которого будет происходить отправка
$Credentials = new-object System.Net.networkCredential
$Credentials.domain = ""
$Credentials.UserName = "mail"
$Credentials.Password = ""
$smtp.Credentials = $Credentials
# Производим отправку
$smtp.Send($mail)
# В случае необходимости удаляем файл
#Remove-Item $file
#} else {
#Write-Host "File $file not found"
}
Смотрит если свободного места меньше 50Гб, то эти данные помещает в тело письма, во вложении html файл с ошибками ОС.
В файле hostlist.txt содержатся имена тех серверов, у которых требуется отслеживать состояние системы, он в таком формате:
BACKUP
SQL1
SQL2
Что еще можно сюда дополнить