Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Запуск бат файла на сервере через эл. письмо

Ответить
Настройки темы
PowerShell - [решено] Запуск бат файла на сервере через эл. письмо

Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день, всем

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

Задача: есть сервер1 там уже написан скрипт на BAT. компы все в AD. Есть Exchange.

Нужно при отправке письма от любого пользователя на определенного получателя (пример bat@example.com) он получает его обрабатывает если в сообщение содержится команда (пример fas/start ) то начинает работать скрипт. И так каждую

Можно автоматом очищать почту ну или как удобно чтобы он знал когда запускать.

Еще нужно избежать того чтобы не устанавливать на сервер OUTLOOK!

Можно выбрать любой другой язык написания скрипта VBS/BAT/PS/CMD/C#/++

Заранее всех благодарю кто поможет в решений данной задачи!

P.S. если задача написано сумбурно простите комментируйте и постараюсь подробно описать.

Отправлено: 13:23, 13-04-2015

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Скачиваем EWS 2.2 и устанавливаем - http://www.microsoft.com/en-us/downl....aspx?id=42951

Код: Выделить весь код
# Почтовый ящик
$ews = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService("Exchange2013_SP1")
$ews.Credentials = New-Object System.Net.NetworkCredential('UserName', 'P@$$w0rd1', "DOMAIN")
$ews.AutodiscoverUrl("bat@example.com")

# Папка входящие
$inboxFolderName = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox
$inboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ews,$inboxFolderName)


# Элементы
$itemView = New-Object -TypeName Microsoft.Exchange.WebServices.Data.ItemView(1000)
$dateTimeItem = [Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeReceived

# Фильтр сегодня
$ToDay = (Get-Date).Date
$searchFilter = New-Object -TypeName Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThanOrEqualTo($dateTimeItem,$ToDay)
$foundItems = $ews.FindItems($inboxFolder.Id,$searchFilter,$itemView)
 
# Выполняем скрипт
$foundItems | Foreach {
	$i = $_
	if($i.Subject -match "Run") {
		Invoke-Expression "C:\Script\script.bat"
		$i.Delete("MoveToDeletedItems")
	}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 13-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun,
Добрый день, спасибо за помощь!

у меня возникли вопросы.

1. Установил EWS 2.2 , какие настройки надо ему, в службах запускать надо?
2. Этот скрипт мне надо настроить в планировщик?
3. в PS скрипте (("Exchange2013_SP1")) что нужно прописать?

Отправлено: 07:16, 15-04-2015 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


1. Никакие
2. Не знаю, можете вручную, можете нанять человека, чтобы запускал
3. Логично, что версию Exchange сервера

https://msdn.microsoft.com/en-us/lib...exchg.80).aspx

Exchange2007_SP1 Exchange Server 2007 Service Pack 1 (SP1).
Exchange2010 Exchange Server 2010.
Exchange2010_SP1 Exchange Server 2010 Service Pack 1 (SP1).
Exchange2010_SP2 Exchange Server 2010 Service Pack 2 (SP2).
Exchange2013 Exchange Server 2013.
Exchange2013_SP1 Exchange Server 2013 Service Pack 1 (SP1).

4. Для импорта модуля использовать
Код: Выделить весь код
# Подключение модуля
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
5. $i.Subject -match "Run" - запуск скрипта, если заголовок содержит слово Run
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:23, 15-04-2015 | #4


Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun,

Я разобрался спасибо, вот только 2-е ошибки!

Код: Выделить весь код
Exception calling "Bind" with "2" argument(s): "Value cannot be null.
Parameter name: folderId"
At line:9 char:66
+ $inboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind <<<< ($ews,$inboxFolderName)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
 
Exception calling "FindItems" with "3" argument(s): "The element at position 0 is invalid
Parameter name: parentFolderIds"
At line:19 char:29
+ $foundItems = $ews.FindItems <<<< ($inboxFolder.Id,$searchFilter,$itemView)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

Отправлено: 10:13, 15-04-2015 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Value cannot be null. - Предположительно проблема с $ews. Приведите вывод $ews.

Отправлено: 10:31, 15-04-2015 | #6


Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun,
Огромное спасибо

Все получилось!

сам ошибку допустил:
Код: Выделить весь код
$inboxFolderName = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox #Входящие

Отправлено: 10:40, 15-04-2015 | #7


Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun,

А если дополнить?

1. К примеру когда запустит батник он письмо отправлял мне что скрипт запущен! и дальше продолжал работать!
2. А как быть если 3-сервера? они не будут ругаться и драться за одно письмо?

Спасибо заранее!

Отправлено: 11:16, 15-04-2015 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


1. К примеру когда запустит батник он письмо отправлял мне что скрипт запущен! и дальше продолжал работать! - Добавить в батник команду для отправки письма, чтобы наверняка знать, что bat запустился

2. А как быть если 3-сервера? они не будут ругаться и драться за одно письмо? - Кто первый получил, тот и выполнил и в последующим удалил письмо. Вариантов много, например:
  • Отсылать три письма с разными темами, в которых есть указание сервера на котором выполняется( 1-Run, 2-Run)
  • Создать персональные почтовые ящики под каждый сервер
  • Выбрать основной сервер или любой другой, который будет проверять письмо и запускать батник на остальных серверах
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:22, 15-04-2015 | #9


Аватара для AZABAZA

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun,

Спасибо

Отправлено: 12:27, 15-04-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Запуск бат файла на сервере через эл. письмо

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - запуск бат файла с указанием месторасположения окна Тимур_Макенов@vk Скриптовые языки администрирования Windows 25 17-05-2019 16:23
CMD/BAT - Запуск cmd-файла на сервере с веб-сраницы molecul Скриптовые языки администрирования Windows 2 08-05-2012 21:57
VBS/WSH/JS - Письмо на почту через прокси lohi1234567 Скриптовые языки администрирования Windows 3 26-10-2010 11:11
CMD/BAT - Скачивание файла и проверка на отличия от файла на сервере. maslovt Скриптовые языки администрирования Windows 2 08-05-2010 19:54
CMD/BAT - Как из бат-файла проверить наличие файла по ссылке, не скачивая файл ? mitiya Скриптовые языки администрирования Windows 2 27-06-2008 20:50




 
Переход