コンソールの.exeアプリケーションを実行するpowershellスクリプトがあります。コンソールアプリケーションはWebサービスを実行します。 Webサービスは、タスクを完了するのに約10分かかります。130秒後のPowershellスクリプトのタイムアウト
運用環境では、約130秒後にpowershellスクリプトが終了し、Webサービスタスクが終了します。これが中核的な問題です!ローカル環境ではすべてがうまく動作します。
Powershellバージョン2は、ローカルとプロダクションの両方で実行されています。
コンソールからpowershellスクリプトを実行するとき。ローカルでは、powershellスクリプトはコンソールアプリケーションの戻り値を出力します。プロダクションでは、画面に何も印刷されません。新しいコマンドプロンプトが表示されます。
タスクは、プロダクション環境のWebページから非同期で実行できます。
すべてのアプリケーションコード/設定ファイルは、ローカル/プロダクション環境で同じです。
唯一のことは、powershellスクリプトがタイムアウトしてコンソールアプリケーションを終了し、Webサービスを終了させるということです。
パワーシェルのタイムアウトを調べて、別のスクリプトで試してみました。しかし、ローカルで動作するという事実は、PowerShellのデフォルト設定問題を示すようです。
このページでは、タイムアウト設定を説明します。 http://www.ehow.com/how_12026004_set-timeout-powershell.html
しかしランニング:監督のWSMan:生産で実行\ localhostの\パスでシェル結果が見つかりませんエラー。
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)
「&reminder.exe」のような 'Invoke-Expression'の代わりに'& 'を使ってWin32プログラムを呼び出さなければなりません。 'Invoke-Expression' [here](http://blogs.msdn.com/b/powershell/archive/2011/06/03/invoke-expression-considered-harmful.aspx)については、Windows PowerShellのブログを参照してください。 。 –
明確にするために、 'reminder.exe'は、Webサービスを実行するコンソールアプリケーションです。また、スクリプトをどのように呼び出しているかという観点から、本番環境とローカル環境の違いをもう少し詳しく説明できますか? PowerShellリモーティングを使用して、本番システムでリモートでスクリプトを実行していますか? –
修正 - reminder.exeは、Webサーバーを実行するコンソールアプリケーションです。私が地元と生産の間で認識している違いはありません。 Localは実際にはローカル開発用のWindows Server 2008 R2ボックスです。プロダクションサーバーは同じです。 powershellスクリプトは、単にテスト目的のためにpowershellコマンドラインから実行されています。 $を試しましたが、構文を正しく取得できません。 reminder.exeには実際には完全なパスが空白になります。簡単な例を提供できますか? –