PowerShell для управления хранилищем и файловой системой (часть 10)

Опубликовано: 18 Марта, 2023

  • PowerShell для управления хранилищем и файловой системой (часть 2)
  • PowerShell для управления хранилищем и файловой системой (часть 3)
  • PowerShell для управления хранилищем и файловой системой (часть 4)
  • PowerShell для управления хранилищем и файловой системой (часть 5)
  • PowerShell для управления хранилищем и файловой системой (часть 6)
  • PowerShell для управления хранилищем и файловой системой (часть 7)
  • PowerShell для управления хранилищем и файловой системой (часть 8)
  • PowerShell для управления хранилищем и файловой системой (часть 9)
  • PowerShell для управления хранилищем и файловой системой (часть 11)

Введение

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

Прежде чем я начну

Прежде чем я начну, я должен указать, что, хотя PowerShell может отправлять сообщения электронной почты, это зависит от внешнего SMTP-сервера. Способ построения сценария зависит от платформы электронной почты, которую вы собираетесь использовать. В моем случае я буду использовать тестовое развертывание Exchange Server 2013. В этой статье я покажу вам, как заставить работать почту. В следующей статье мы интегрируем код, связанный с почтой, в наш существующий скрипт.

Обработка учетных данных

Первая проблема, с которой вам придется столкнуться, — это обработка учетных данных. Использование почтового ящика Exchange Server для отправки почты требует от пользователя аутентификации в среде Active Directory. Сценарий PowerShell можно настроить на запрос учетных данных пользователя с помощью командлета Get-Credential, но это мало поможет, если сценарий будет выполняться автоматически. В то же время, однако, вы действительно не хотите жестко кодировать простой текстовый пароль в свой скрипт. К счастью, есть решение.

Хитрость заключается в том, чтобы создать файл, содержащий зашифрованный пароль, и настроить сценарий для использования этого файла для аутентификации. Этот процесс проще, чем кажется. Например, если вы хотите создать файл с именем C:ScriptsPassword.txt, вы можете создать его с помощью следующей команды:

Read-Host –AsSecureString | ConvertFrom-SecureString | Исходящий файл C:ScriptsPassword.txt

Итак, давайте посмотрим, как это работает. Часть команды Read-Host сообщает PowerShell, что вы хотите ввести что-то — в данном случае пароль. Параметр AsSecureString указывает PowerShell маскировать вводимые данные. Наконец, пароль преобразуется из защищенной строки в зашифрованный текст и записывается в целевой текстовый файл. Вы можете увидеть, как это выглядит на рисунке А.

Изображение 4647
Рисунок A: Пароль маскируется при вводе.

Как вы можете видеть на рисунке выше, PowerShell не предлагает мне ввести пароль. Я просто начал печатать. Как и я, PowerShell замаскировал мой ввод. Вы можете увидеть содержимое файла паролей на рисунке B.

Изображение 4648
Рисунок B: Это мой файл паролей.

Отправка электронной почты

Теперь, когда я показал вам метод обработки учетных данных для проверки подлинности, давайте продолжим и создадим сценарий, который будет отправлять сообщение электронной почты. Для целей этой статьи я собираюсь разработать свой сценарий для отправки тестового электронного письма. Как только код будет проверен на работоспособность, мы можем беспокоиться об отправке чего-то более значимого. Вы можете увидеть мой код ниже:

$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

Как видите, мой код очень прост. На самом деле, для отправки сообщения электронной почты требуется всего одна строка кода. Весь остальной код, который вы видите, просто определяет характеристики отправляемого сообщения. Мы могли бы сделать все это в одной строке, но я обнаружил, что код становится менее запутанным и его легче модифицировать, если используются переменные.

Таким образом, первый блок кода определяет пять основных переменных. Эти переменные включают в себя:

$EmailTo – адрес электронной почты, на который будет отправлено сообщение

$EmailFrom – адрес электронной почты, откуда должно прийти сообщение.

$Subject – строка темы сообщения.

$Body – тело сообщения

$SMTPServer — имя или IP-адрес вашего SMTP-сервера.

Несмотря на то, что эти переменные действительно просты, есть несколько вещей, которые стоит знать. Во-первых, вы не ограничены использованием только тех переменных, которые использовал я. PowerShell поддерживает использование таких атрибутов, как CC и BCC, и даже позволяет отправлять почтовые вложения.

Еще одна вещь, о которой я хочу упомянуть, это то, что в моем сценарии сообщения будут отправляться администратору домена и будут выглядеть как исходящие от администратора домена. В производственной среде вы можете рассмотреть возможность создания выделенного почтового ящика или отправки почты на обычный адрес электронной почты администратора.

Следующий блок кода устанавливает учетные данные аутентификации для почтового сервера. В этом случае $Username содержит имя пользователя для учетной записи, которая будет выполнять вход на почтовый сервер. В случае среды Microsoft Exchange эта учетная запись должна быть указана в формате доменимя пользователя. Если вы используете почтовый сервер, отличный от Exchange Server, вам, вероятно, придется указать свое имя пользователя в другом формате.

В переменной $Password хранится содержимое файла паролей. В данном случае я читаю файл с именем C:ScriptsCred.txt. Пароль считывается из файла, а затем преобразуется в защищенную строку.

Третья строка кода в этом разделе устанавливает переменную с именем $Cred. Эта переменная будет хранить учетные данные пользователя так, как их может использовать PowerShell.

Последняя строка кода — это строка, которая фактически отправляет почтовое сообщение. В этой строке кода используется командлет Send-MailMessage, который поддерживается только в PowerShell 2.0 и более поздних версиях. Командлет использует такие параметры, как «Кому», «От», «Тема», «Тело», «Учетные данные» и «SMTPServer». Обратите внимание в коде, как я использую переменные для заполнения этих параметров.

Так что же происходит, когда я запускаю этот скрипт? Что ж, если вы посмотрите на рисунок C, то увидите, что скрипт не выдает никаких видимых результатов.

Изображение 4649
Рисунок C. Мой почтовый скрипт не выводит никаких видимых результатов в PowerShell.

Несмотря на то, что PowerShell не отображает никаких выходных данных, сценарий генерирует указанное сообщение электронной почты. Вы можете увидеть, как выглядит сообщение на рисунке D.

Изображение 4650
Рисунок D: Это сообщение электронной почты было создано PowerShell.

Вывод

В этой статье я объяснил, как можно написать сценарий PowerShell, который отправляет сообщение электронной почты. В следующей статье этой серии я интегрирую свой почтовый сценарий в сценарий работоспособности хранилища, чтобы мы могли получать оповещения по электронной почте о любых проблемах с работоспособностью хранилища, которые могут быть обнаружены.

  • PowerShell для управления хранилищем и файловой системой (часть 2)
  • PowerShell для управления хранилищем и файловой системой (часть 3)
  • PowerShell для управления хранилищем и файловой системой (часть 4)
  • PowerShell для управления хранилищем и файловой системой (часть 5)
  • PowerShell для управления хранилищем и файловой системой (часть 6)
  • PowerShell для управления хранилищем и файловой системой (часть 7)
  • PowerShell для управления хранилищем и файловой системой (часть 8)
  • PowerShell для управления хранилищем и файловой системой (часть 11)