У меня есть сценарий powershell, который запускает консольное приложение .exe. Консольное приложение запускает веб-службу. Для выполнения задачи веб-служба занимает около 10 минут.Тайм-аут скрипта Powershell после 130 секунд
В производственной среде сценарий powershell заканчивается примерно через 130 секунд, а задача веб-службы завершается. Это основная проблема! Все хорошо работает в локальной среде.
Powershell version 2 работает как на местном уровне, так и на производстве.
При запуске скрипта powershell с консоли. Локально сценарий powershell выводит возвращаемое значение консольного приложения. В производстве ничего не печатается на экране. Он просто отображает новую командную строку.
Задача может быть выполнена как можно быстрее с веб-страницы в производственной среде.
Все прикладные коды/файлы конфигурации одинаковы как в локальной, так и в производственной среде.
Единственное, что имеет смысл, это сценарий powershell, который выдает время и заканчивает консольное приложение, которое, в свою очередь, завершает работу веб-службы.
Исследуйте тайм-ауты powershell и сыграли с разными сценариями. Но тот факт, что он работает локально, как представляется, указывает на проблему с настройкой по умолчанию для powershell.
Эта страница описывает параметры времени ожидания: http://www.ehow.com/how_12026004_set-timeout-powershell.html
Но работает: Dir WSMan: \ локальный \ Результаты оболочки в пути не найдена ошибка при запуске в производство.
Powerscript внизу, но была удалена вся чувствительная информация. Успешный адрес электронной почты отправляется после запуска сценария.
# attempt to exe file. iex is an alias for the invoke-expression cmd
iex "Reminder.exe"
$smtpServer = ""
$fromAddress = ""
$toAddress = ""
$subject = "SUCCESS"
$msgBody = ""
# $? lets us know if the previous command was successful or not
# $LASTEXITCODE gives us the exit code of the last Win32 exe execution
if (!$? -OR $LASTEXITCODE -gt 0)
{
$subject = "FAIL"
}
$smtpClient = new-object Net.Mail.SmtpClient($smtpServer)
$smtpClient.Credentials = $senderCreds
$smtpClient.Send($fromAddress,$toAddress,$subject,$msgBody)
Одно следует отметить, вы должны использовать '&' для вызова программы Win32 вместо 'Invoke-Expression', такие как' & reminder.exe'. Дополнительную информацию см. В блоге Windows PowerShell о 'Invoke-Expression' [здесь] (http://blogs.msdn.com/b/powershell/archive/2011/06/03/invoke-expression-considered-harmful.aspx) , –
Чтобы уточнить, 'reminder.exe' - ваше консольное приложение, которое запускает веб-службу, правильно? Также вы могли бы более подробно описать разницу между производственной средой и вашей локальной средой с точки зрения того, как вы вызываете скрипт? Используете ли вы PowerShell для удаленного запуска сценария в производственной системе? –
Correct - reminder.exe - это консольное приложение, которое запускает веб-сервер. Нет никаких различий, которые я знаю между местными и производственными. Локальный - это поле Windows Server 2008 R2, используемое для локальной разработки. Сервер производства тот же. Скрипт powershell просто запускается из командной строки powershell (для целей тестирования). Пробовал $, но не смог получить синтаксис вправо. На самом деле reminder.exe имеет полный путь с пробелами. Можете ли вы дать быстрый пример? –