Відправка пошти з PowerShell

Я вже розповідав про те, як можна відправити пошту з командного рядка за допомогою telnet. Тепер постало завдання написання скрипта для системи моніторингу, який би в разі настання певного події відправляв поштове повідомлення відповідальній особі.

Так як останнім часом все частіше доводиться використовувати скрипти на PowerShell, то і скрипт відправки пошти я вирішив реалізувати саме на ньому. Цей невеликий скрипт PowerShell відправляє e-mail лист певного адресату, зазначеному в його коді. Даний скрипт використовується в самопісний системі моніторингу визначеною не майкрософтовського служби, запущеної на Windows Server 2008. У разі, якщо служба зупинитися, то в техпідтримку тут же відправляється лист з оповіщенням про проблему. Мій PowerShell код виглядає наступним чином:

$ EmailFrom = "[email protected]"
$ EmailTo = "[email protected]"
$ Subject = "Check service at your Windows Server 2008 NOW"
$ Body = "Monitoring service is stop !!"
$ SmtpServer = "smtp.winitpro.ru"
$ Smtp = New-Object net.mail.smtpclient ($ SmtpServer)
$ Smtp.Send ($ EmailFrom, $ EmailTo, $ Subject, $ Body)

При використанні скриптів на PowerShell є ряд обмежень. З міркувань безпеки скрипт PowerShell можна запустити, просто двічі клацнувши по файлу з расшіреніем.PS1. Тому, якщо ви хочете запустити скрипт PowerShell з планувальника завдань або ще якимось автоматизованим способом, то можна створити скрипт VBS, який в свою чергу буде викликати скрипт на PowerShell:

Set objShell = CreateObject ( "WScript.Shell")
objShell.Run ( "powershell.exe c: \ script \ send_email.ps1>")

В результаті у вас повинні вийде два файли: один містить vbs код (расшіреніе.VBS), у другому знаходиться PowerShell код відправки пошти (розширення .PS1).

У тому випадку, якщо ви використовуєте Windows Server 2008, не забудьте включити функцію підтримки PowerShell, інакше скрипти PS працювати не будуть.
Мені знадобився код С ++, що дозволяє приховати вікно windows: How to Hide Another Person's Window.