PowerShell для управления хранилищем и файловой системой (часть 11)
- PowerShell для управления хранилищем и файловой системой (часть 2)
- PowerShell для управления хранилищем и файловой системой (часть 3)
- PowerShell для управления хранилищем и файловой системой (часть 4)
- PowerShell для управления хранилищем и файловой системой (часть 5)
- PowerShell для управления хранилищем и файловой системой (часть 6)
- PowerShell для управления хранилищем и файловой системой (часть 7)
- PowerShell для управления хранилищем и файловой системой (часть 8)
- PowerShell для управления хранилищем и файловой системой (часть 12)
Мы почти закончили наш сценарий работоспособности хранилища. Все, что нам действительно осталось сделать, это добавить механизм уведомления по электронной почте и запланировать автоматический запуск сценария. В предыдущей статье я показал вам, как создать сообщение электронной почты из сценария PowerShell. В этой статье я хочу показать вам, как интегрировать почтовые уведомления в уже созданный нами скрипт. Итак, приступим.
Как вы помните, вот как сейчас выглядит наш скрипт:
Функция Get-Smart
# Функция для получения информации SMART о диске
{
$Smart = Get-WmiObject -namespace rootwmi –class MSStorageDriver_FailurePredictStatus -ComputerName $Input
Если ($Smart.PredictFailure -EQ $True) {$Smart | Select-Object PSComputerName, InstanceName, PredictFailure, Reason | Флорида}
}
Функция Get-Health
# Функция для получения информации о состоянии диска
{
$Pdisk= Get-PhysicalDisk
ForEach ($LDisk в $PDisk)
{
$CurrentDisk = $LDisk | Get-StorageReliabilityCounter
Если ($CurrentDisk.Temperature -GT 35 -ИЛИ $CurrentDisk.ReadErrorsTotal -GT 0 -ИЛИ $_.CurrentDisk -GT 0){
$LDisk.FriendlyName
$LDisk.HealthStatus
$LДиск | Get-StorageReliabilityCounter | Температура Select-Object, ReadErrorsTotal, WriteErrorsTotal | Флорида
Write-Host ================== }
}
}
#Тело сценария
$Servers = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4", "Prod1", "Prod2")
ForEach ($Server в $Servers) {
$ сервер
$ сервер | Поумнеть
Enter-PSSession -имя_компьютера $Server
Получить здоровье
Exit-PSSession
}
Самый простой способ добавить в сценарий возможность уведомления по электронной почте — создать функцию электронной почты. Эта функция может содержать все, кроме тела сообщения. Мы можем отправить тело сообщения в функцию в виде переменной. Таким образом, сообщение электронной почты может немного рассказать получателю о проблеме.
Поскольку нашей функции потребуется имя, я назову ее Send-Notice. Если бы мы взяли код из предыдущей статьи и выгрузили бы его в функцию Send-Notice как есть, то функция могла бы выглядеть так:
Функция отправки уведомлений{
# Функция для отправки уведомления по электронной почте о проблеме
$EmailTo = «[электронная почта защищена]»
$EmailFrom = «[электронная почта защищена]»
$Тема = "Тест"
$Body = «Тестовое тело»
$SMTPServer = «E2K13.poseydemo.com»
$Username = "ПосейдемоАдминистратор"
$Password = Get-Content c:scriptscred.txt | ConvertTo-SecureString
$Cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
Send-MailMessage -To $EmailTo -From $EmailFrom -Subject $Subject -Body $Body -Credential $Cred -SMTPServer $smtpserver
}
Добавив эту функцию в скрипт, можно будет отправлять тестовые сообщения на [email protected], просто вызвав функцию. Конечно, мы хотим сделать больше, чем просто отправлять тестовые сообщения. Мы хотим отправлять содержательные уведомления о проблемах.
Если вы посмотрите на приведенную выше функцию, то заметите, что она содержит переменную с именем $Body. Эта переменная формирует тело сообщения электронной почты, которое должно быть отправлено. Таким образом, ключом к отправке осмысленных сообщений будет удаление строки $Body из функции Send-Notice и передача вместо нее тела сообщения. Таким образом, мы сможем отправлять почту по мере необходимости в ответ на условия, обнаруженные сценарием, и предоставлять получателю информацию о проблеме.
Спроектировать функцию Send-Notice для приема тела сообщения так же просто, как изменить имя функции, чтобы оно принимало переменную, например:
Функция отправки уведомлений($Body)
Конечно, мы также должны удалить строку $Body= из функции.
Следующая хитрость состоит в том, чтобы изменить другие функции, чтобы сформировать тело сообщения, а затем передать это тело сообщения функции Send-Notice. Даже этот процесс относительно прост.
В настоящее время функция Get-Smart содержит следующую строку кода:
Если ($Smart.PredictFailure -EQ $True) {$Smart | Select-Object PSComputerName, InstanceName, PredictFailure, Reason | Флорида}
Эта строка кода вызывает отображение имени компьютера, имени экземпляра, прогноза сбоя и кода причины всякий раз, когда SMART прогнозирует сбой хранилища. Мы можем легко адаптировать эту строку кода для создания тела сообщения электронной почты и отправки его функции Send-Notice. Результирующий код выглядит следующим образом:
Функция Get-Smart
# Функция для получения информации SMART о диске
{
$Smart = Get-WmiObject -namespace rootwmi –class MSStorageDriver_FailurePredictStatus -ComputerName $Input
Если ($Smart.PredictFailure -EQ $True) {
# $Смарт | Select-Object PSComputerName, InstanceName, PredictFailure, Reason
$Body='SMART предсказал сбой. '
$Body2 = $Smart.PSComputerName
$Body3 = $Smart.InstanceName
$Body4 = $Smart.PredictFailure
$Body5 = $Smart.Reason
$Body = $Body + $Body2 + $Body3 + $Body4 + $Body5
Отправить уведомление ($ Body)
}
}
Приведенный выше код проверяет прогнозируемый сбой хранилища, а затем создает переменную с именем $Body. Переменная $Body состоит из текста «SMART предсказал сбой», за которым следует имя компьютера, имя экземпляра, прогноз сбоя и код причины. Все это объединяется в одну переменную с именем $Body, которая отправляется в функцию Send-Notice.
Вы также могли заметить, что я закомментировал команду $Smart. Единственная причина, по которой я это сделал, заключалась в том, чтобы вывод не отображался на экране.
Итак, с учетом сказанного, вот как выглядит сценарий в целом:
Функция отправки уведомлений($Body)
# Функция для отправки уведомления по электронной почте о проблеме
{
$EmailTo = «[электронная почта защищена]»
$EmailFrom = «[электронная почта защищена]»
$Тема = "Тест"
$SMTPServer = «E2K13.poseydemo.com»
$Username = "ПосейдемоАдминистратор"
$Password = Get-Content c:scriptscred.txt | ConvertTo-SecureString
$Cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
Send-MailMessage -To $EmailTo -From $EmailFrom -Subject $Subject -Body $Body -Credential $Cred -SMTPServer $smtpserver
}
Функция Get-Smart
# Функция для получения информации SMART о диске
{
$Smart = Get-WmiObject -namespace rootwmi –class MSStorageDriver_FailurePredictStatus -ComputerName $Input
Если ($Smart.PredictFailure -EQ $True) {
# $Смарт | Select-Object PSComputerName, InstanceName, PredictFailure, Reason
$Body='SMART предсказал сбой. '
$Body2 = $Smart.PSComputerName
$Body3 = $Smart.InstanceName
$Body4 = $Smart.PredictFailure
$Body5 = $Smart.Reason
$Body = $Body + $Body2 + $Body3 + $Body4 + $Body5
Отправить уведомление ($ Body)
}
}
Функция Get-Health
# Функция для получения информации о состоянии диска
{
$Pdisk= Get-PhysicalDisk
ForEach ($LDisk в $PDisk)
{
$CurrentDisk = $LDisk | Get-StorageReliabilityCounter
Если ($CurrentDisk.Temperature -GT 35 -ИЛИ $CurrentDisk.ReadErrorsTotal -GT 0 -ИЛИ $_.CurrentDisk -GT 0){
$LDisk.FriendlyName
$LDisk.HealthStatus
$LДиск | Get-StorageReliabilityCounter | Температура Select-Object, ReadErrorsTotal, WriteErrorsTotal | Флорида
Write-Host ================== }
}
Хотя в настоящее время сценарий только отправляет уведомления по электронной почте о сбоях SMART, тот же метод можно легко применить к функции Get-Health. Помните, все, что нам нужно сделать, это сформировать переменную с именем $Body, а затем передать эту переменную функции Send-Notice. Например, мы могли бы сделать что-то вроде этого:
$Body1 = 'На диске обнаружена проблема с работоспособностью диска'
$Body2 = $LDisk.FriendlyName
$тело3 = '. Состояние здоровья: '
$Body4 = $LDisk.HealthStatus
$Body = $Body1 + $Body2 + $Body3 + $Body4
$Отправить-Уведомление($Body)
Конечно, этот сегмент кода является просто примером. Вы можете проявить творческий подход при формировании уведомлений по электронной почте.
Вывод
В этой статье я показал вам, как интегрировать уведомления по электронной почте в сценарий работоспособности диска. В следующей статье этой серии я планирую завершить серию, показав вам, как автоматизировать сценарий, чтобы он запускался в запланированное время.
- PowerShell для управления хранилищем и файловой системой (часть 2)
- PowerShell для управления хранилищем и файловой системой (часть 3)
- PowerShell для управления хранилищем и файловой системой (часть 4)
- PowerShell для управления хранилищем и файловой системой (часть 5)
- PowerShell для управления хранилищем и файловой системой (часть 6)
- PowerShell для управления хранилищем и файловой системой (часть 7)
- PowerShell для управления хранилищем и файловой системой (часть 8)