2010-03-04 103 views
2

我有一個複雜的Powershell腳本,它作爲SQL 2005 Server代理作業的一部分運行。該腳本工作正常,但它使用「Start-Transcript $ strLogfile -Append」命令將其所有操作記錄到腳本文件中。問題是成績單總是空的。它添加了頁眉和頁腳以指示轉錄本正在啓動和停止,但它實際上不記錄任何內容。例如:2005年從SQL代理作業運行腳本時Powershell腳本爲空SQL Server

********************** 
Windows PowerShell Transcript Start 
Start time: 20100304173001 
Username : xxxxxxxxxxxx\SYSTEM 
Machine : xxxxx-xxx (Microsoft Windows NT 5.2.3790 Service Pack 2) 
********************** 
********************** 
Windows PowerShell Transcript End 
End time: 20100304173118 
********************** 

當我從命令提示符執行腳本或開始 - >運行一切正常。這裏是(用於運行腳本(SQL代理作業的操作系統的CmdExec步驟中使用相同的命令)

powershell.exe -File "c:\temp\Backup\backup script.ps1" 

我首先想到它必須是與系統帳戶下運行腳本的命令默認的SQL Agent帳戶),但即使當我嘗試將SQL代理更改爲以我自己的個人帳戶運行時,它仍然創建了空白的副本。

有什麼辦法讓PowerShell成績單在作爲2005 SQL Server代理作業的一部分執行時能夠正常工作嗎?

回答

0

我還不確定爲什麼Powershell腳本是空的,但我們找到了解決方法。在SQL作業的CmdExec步驟下,有一個預先選項可以將輸出捕獲到文件中,該文件與「將輸出附加到現有文件」選項結合使用,並且使用Logfile.rtf擴展名與Powershell轉錄本大致相同。通過這種方式,任何從Powershell腳本(包括本地控制檯可執行文件輸送到「| out-host」)打印到主機的東西都將被捕獲到日誌文件中。

1

如果您的腳本使用本地命令(控制檯前綴),則Start-Transript不記錄任何輸出。此問題已被logged on Connect,你可以對它投票。捕獲所有輸入的一種方法是使用cmd.exe:

cmd /c powershell.exe -file "C:\temp\backup script.ps1" > backup.log 
+0

事情是,從cmd.exe運行或從開始 - >運行時,腳本工作正常。它使用Powershell 2.0並將任何可執行文件的輸出傳輸到外部主機。 – 2010-03-05 19:01:00

1

sqlps.exe沒有實現某些方法,包括支持寫主機的方法。這可以解釋爲什麼當從SQL Agent Powershell jobstep運行sqlps.exe時,您沒有看到使用Start-Transcript的輸出。有關更多信息,請參閱http://blogs.msdn.com/mwories/archive/2009/09/30/the-use-of-write-host-and-sql-server-agent-powershell-job-steps.aspx

+0

很高興知道,但sqlps.exe實際上是SQL 2008的一部分。在這裏,我使用SQL 2005和調用powershell.exe作爲SQL代理作業中CmdExec步驟的一部分。我的猜測是,它與未在基於控制檯的主機中運行的代理作業有關。 – 2010-03-05 19:05:40