2010-03-16 4 views
0

나는 powershell에서 일부 병렬 SQL Server 2005 데이터베이스 복원을 수행하고 있습니다. 내가 한 일은 cmd.exe를 사용하여 powershell이 ​​완료 될 때까지 기다리지 않도록 시작하는 것입니다. 내가해야 할 일은 출력을 추가로 로그 파일로 파이프하는 것입니다. Add-Content를 사용하면 powershell이 ​​기다립니다. 원하는 것은 아닙니다.powershell에서 로그 파일에 추가하는 방법은 무엇입니까?

내 코드는 문제가 sqlcmd.exe를 -o 덮어 쓰기입니다

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

입니다. 나는이 작업을 추가하려고 시도했다.

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

출력은 SQLCMD 창에 그대로 유지되고 파일로 이동하지 않기 때문에 작동하지 않는다. 어떤 제안?

감사합니다. 마크.

+0

질문에 약간의 오타가 있습니다. SQL Server 2000을 SQL Server 2005로 변경하십시오. –

답변

1

sqlcmd.exe의 -o가 작동하지만 덮어 쓰는 경우 각 복원에 대한 로그 파일을 만든 다음 모든 로그 파일의 내용을 하나의 마스터 로그 파일로 파이프 반환합니다. 선택한 경우 중간 파일을 정리할 수 있습니다.

0

sqlcmd이 로그를 stderr로 출력 할 수 있습니까? 그렇다면 2>&1을 끝에 붙여 표준 출력 스트림을 표준 출력 스트림과 동일한 방식으로 만듭니다.

감히 내가 PowerShell을 이미 사용하고 있다면 cmd을 통해 모든 작업을 수행하고 있는지 묻습니다. Start-Process의 무엇이 문제입니까? :-)

+0

Start-Process를 사용 하겠지만 Powershell 1.0을 사용하고 있습니다. SQLCMD는 stdout으로 출력합니다. –

관련 문제