0

私はPowerShellでSQLServer2005データベースの並列復元を行っています。私が行った方法は、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ウィンドウに残り、ファイルに移動しないため、機能しません。助言がありますか?

ありがとう、マーク。

4

2 に答える 2

1

sqlcmd.exeの-oが機能するが上書きされる場合は、復元ごとにログファイルを作成し、すべてのログファイルの内容を1つのマスターログファイルにパイプで返します。次に、必要に応じて中間ファイルをクリーンアップできます。

于 2010-03-17T03:28:01.643 に答える
0

sqlcmdおそらくそのログをstderrに出力しますか?その場合2>&1は、最後にaを付けて、標準エラーストリームを標準出力ストリームと同じようにします。

cmdそして、PowerShellをすでに使用しているのに、なぜそれをすべて実行しているのか、あえて尋ねます。何が問題なのStart-Processですか?:-)

于 2010-03-16T14:15:12.950 に答える