如何附加到PowerShell中的日志文件?

时间:2010-03-16 09:26:07

标签: sql-server powershell sqlcmd

我在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窗口中而不会转到文件。有什么建议吗?

谢谢, 标记

2 个答案:

答案 0 :(得分:1)

如果sqlcmd.exe的-o工作但覆盖,我会为每个恢复创建一个日志文件,然后让所有日志文件的内容返回管道传输到一个主日志文件中。然后,如果您选择,您可以清理中间文件。

答案 1 :(得分:0)

sqlcmd是否可以将其日志输出到stderr?如果是这样,那么在末尾添加一个2>&1,这使得标准错误流与标准输出流的方式相同。

如果你已经使用PowerShell,我敢问你为什么要通过cmd完成所有这些工作? Start-Process有什么问题? : - )