我在PowerShell中进行了一些并行的SQL Server 2005数据库还原。我这样做的方法是使用cmd.exe并启动,以便powershell不等待它完成。我需要做的是将输出通过append传递到日志文件中。如果我使用Add-Content,那么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 :(得分:1)
如果sqlcmd.exe的-o工作但覆盖,我会为每个恢复创建一个日志文件,然后让所有日志文件的内容返回管道传输到一个主日志文件中。然后,如果您选择,您可以清理中间文件。
答案 1 :(得分:0)
sqlcmd
是否可以将其日志输出到stderr?如果是这样,那么在末尾添加一个2>&1
,这使得标准错误流与标准输出流的方式相同。
如果你已经使用PowerShell,我敢问你为什么要通过cmd
完成所有这些工作? Start-Process
有什么问题? : - )