我有一個運行控制檯.exe應用程序的powershell腳本。控制檯應用程序運行一個Web服務。 Web服務大約需要10分鐘才能完成任務。Powershell腳本超時130秒後
在生產環境中的PowerShell腳本完成後約130秒和Web服務任務被終止。這是核心問題!在當地環境中一切正常。
Powershell版本2在本地和生產中都運行。
從控制檯運行powershell腳本時。在本地,powershell腳本打印控制檯應用程序的返回值。在製作過程中,屏幕上沒有任何內容。它只是顯示一個新的命令提示符。
任務可以在生產環境就好了一個網頁上運行異步。
所有的應用程序代碼/配置文件在本地/生產環境相同。
有意義的唯一事情是PowerShell腳本的超時和終止的控制檯應用程序,反過來終止網絡服務。
已經研究PowerShell的超時,並用不同的腳本播放。但它在本地工作的事實似乎表明了PowerShell的默認設置問題。
本頁面描述超時設置: http://www.ehow.com/how_12026004_set-timeout-powershell.html
但運行:導演的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程序,而不是'調用,Expression'如'&reminder.exe'。查看Windows PowerShell博客中關於'Invoke-Expression' [here]的更多信息(http://blogs.msdn.com/b/powershell/archive/2011/06/03/invoke-expression-considered-harmful.aspx) 。 – 2012-01-04 20:22:14
只是爲了澄清,'reminder.exe'是您的控制檯應用程序運行的Web服務,是否正確?您還可以更詳細地描述生產環境與本地環境之間在調用腳本方面的區別?您是否使用PowerShell遠程處理在生產系統上遠程運行腳本? – 2012-01-04 20:35:30
正確 - reminder.exe是運行Web服務器的控制檯應用程序。我沒有區別地方和生產之間的差異。本地實際上是用於本地開發的Windows Server 2008 R2框。生產服務器是相同的。 powershell腳本只是從powershell命令行運行(用於測試目的)。 嘗試了$,但無法獲得正確的語法。提醒程序實際上有一個完整的空間路徑。你能提供一個快速的例子嗎? – 2012-01-04 20:46:39