2010-03-16 4 views
0

Je fais des restaurations de base de données SQL Server 2005 parallèles dans PowerShell. La façon dont je l'ai fait est d'utiliser cmd.exe et de démarrer afin que PowerShell n'attend pas pour qu'il se termine. Ce que je dois faire est de canaliser la sortie dans un fichier journal avec append. Si j'utilise Add-Content, alors powershell attend, ce qui n'est pas ce que je veux.Comment ajouter à un fichier journal dans PowerShell?

Mon extrait de code est

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) 
} 

Le problème est que sqlcmd.exe -o écrasements. Je l'ai essayé de le faire à ajouter:

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

Mais cela ne fonctionne pas parce que les séjours de sortie dans la fenêtre SQLCMD et ne va pas dans le fichier. Aucune suggestion?

Merci, Marque.

+0

Une petite faute de frappe dans votre question. Veuillez remplacer SQL Server 20005 par SQL Server 2005. –

Répondre

1

Si -o pour le sqlcmd.exe fonctionne mais écrase, je créerais un fichier journal pour chaque restauration, puis aurais tous retourné le contenu de chaque fichier journal dans un fichier journal principal. Ensuite, vous pouvez nettoyer les fichiers intermédiaires si vous le souhaitez.

0

Est-ce que sqlcmd peut afficher son journal dans stderr? Si c'est le cas, placez un 2>&1 à la fin, ce qui rend le flux d'erreur standard identique à celui du flux de sortie standard.

Et oserais-je demander pourquoi vous faites tout cela à travers cmd si vous utilisez déjà PowerShell? Quel est le problème avec Start-Process? : -)

+0

J'utiliserais Start-Process mais j'utilise Powershell 1.0. Sorties SQLCMD vers stdout. –

Questions connexes