对不起,我是Powershell的新手,所以我显然错过了一些相当基本的东西,但我似乎无法解决这个问题。
我有一个调用SQL脚本的PowerShell脚本。我可以让脚本运行,但我也想将输出存储在日志文件中。
这是我的powershell脚本
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Invoke-Sqlcmd -inputfile "testscript.sql" -serverinstance '.\sql2008' | Out-file -filepath "testlog.txt"
这是我的testscript.sql
PRINT 'HELLO WORLD'
目前,它会创建testlog.txt文件,但它是空白的。
我做错了什么?
答案 0 :(得分:3)
您想要的数据似乎在详细的数据流中。在PowerShell 3.0及更高版本中,您可以将详细信息流(4)重定向到stdout流(1),然后再将其发送到Out-File。
Invoke-Sqlcmd -inputfile "testscript.sql" -serverinstance '.\sql2008' -verbose 4>&1 | Out-file -filepath "testlog.txt"
有关不同流的说明,请参阅Get-Help about_redirection
。
有关将错误和详细流重定向到Out-File的讨论,另请参阅Powershell: Out-File。
不幸的是,PowerShell 2.0仅支持流0,1,2的重定向。您可以使用[System.Management.Automation.PowerShell]
对象来获取其他流。请参阅Powershell Invoke-Sqlcmd capture verbose output
答案 1 :(得分:1)
您可以将Verbose(以及所有其他控制台输出)保存到文件中,而不会使用Start-Transcript
污染输出流