2010-03-16 57 views
0

我正在做一些並行的SQL Server 2005數據庫恢復PowerShell中。我這樣做的方式是使用cmd.exe並啓動,以便powershell不會等待它完成。我需要做的是用append將輸出傳輸到一個日誌文件中。如果我使用Add-Content,那麼PowerShell會等待,這不是我想要的。如何附加到PowerShell中的日誌文件?

我的代碼段是

foreach ($line in $database_list) 
{ 
<snip> 
    # Create logins 
    sqlcmd.exe -S $instance -E -d master -i $loginsFile -o $logFile 

    # Read commands from a temp file and execute them in parallel with sqlcmd.exe 
    cmd.exe /c start "Restoring $database" /D"$pwd" sqlcmd.exe -S $instance -E -d master -i $tempSQLFile -t 0 -o $logFile 

    [void]$logFiles.Add($logFile) 
} 

的問題是,sqlcmd.exe -o覆蓋。我試着這樣做是爲了追加:

cmd.exe /c start "Restoring $database" /D"$pwd" sqlcmd.exe -S $instance -E -d master -i $tempSQLFile -t 0 >> $logFile 

但由於輸出停留在SQLCMD窗口,而且不進入文件這是行不通的。有什麼建議麼?

感謝, 馬克。

+0

在你的問題中的小錯字。請將SQL Server 20005更改爲SQL Server 2005. – 2010-03-16 11:13:38

回答

1

如果-o爲sqlcmd.exe工作但覆蓋,我會爲每個恢復創建一個日誌文件,然後將每個日誌文件的內容都返回到一個主日誌文件中。那麼你可以清理中間文件,如果你選擇。

0

sqlcmd可能會輸出其日誌到stderr嗎?如果是這樣,則在末尾放置一個2>&1,這使得標準錯誤流與標準輸出流相同。

如果您已經使用PowerShell,我敢問你爲什麼通過cmd做所有事情? Start-Process有什麼問題? :-)

+0

我將使用Start-Process,但我使用Powershell 1.0。 SQLCMD輸出到標準輸出。 – 2010-03-16 14:48:11