【问题标题】:How to append to a log file in powershell?如何在powershell中附加到日志文件?
【发布时间】:2011-01-28 00:47:42
【问题描述】:

我正在 Powershell 中进行一些并行的 SQL Server 2005 数据库恢复。我这样做的方法是使用 cmd.exe 并启动,以便 powershell 不会等待它完成。我需要做的是将输出通过附加管道传输到日志文件中。如果我使用 Add-Content,那么 powershell 会等待,这不是我想要的。

我的代码sn-p是

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 窗口中并且没有转到文件。有什么建议吗?

谢谢, 标记。

【问题讨论】:

  • 您的问题中有一个小错字。请将 SQL Server 20005 更改为 SQL Server 2005。

标签: sql-server powershell sqlcmd


【解决方案1】:

如果 sqlcmd.exe 的 -o 有效但被覆盖,我将为每次还原创建一个日志文件,然后将每个日志文件的内容通过管道返回到一个主日志文件中。然后,您可以根据需要清理中间文件。

【讨论】:

    【解决方案2】:

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

    如果你已经在使用 PowerShell,我敢问你为什么要通过 cmd 来做这一切? Start-Process 有什么问题? :-)

    【讨论】:

    • 我会使用 Start-Process 但我使用的是 Powershell 1.0。 SQLCMD 输出到标准输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多