【问题标题】:Why is my powershell output file blank?为什么我的 powershell 输出文件是空白的?
【发布时间】:2015-08-18 14:26:12
【问题描述】:

抱歉,我是 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 文件,但它是空白的。

我做错了什么?

【问题讨论】:

  • 如果您删除 Out-file 命令并运行它,所需的文本是否会显示在控制台中?
  • @RyanBemrose:不,它没有。
  • @RyanBemrose :如果我这样做 "Invoke-Sqlcmd -inputfile "testscript.sql" -serverinstance '.\sql2008' -verbose" 我可以让它显示在屏幕上,但不确定如何保存它

标签: sql-server powershell sql-server-2008-r2 sqlcmd


【解决方案1】:

您想要的数据似乎在详细数据流中。在 PowerShell 3.0 及更高版本中,您可以将详细流 (4) 重定向到标准输出流 (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 接受的答案

【讨论】:

  • 是的,我之前尝试过,但是当我运行它时,我得到的只是这个错误“不允许与号。& 运算符保留供将来使用;使用“&”将 & 号作为字符串传递。 "有什么想法吗?
  • 奇怪的是,如果我将 4>&1 替换为 2>&1 则它可以工作(尽管它仍然是空白的)。数据流 4 好像丢失了还是怎么回事?
  • 您使用的是哪个 PowerShell 版本?在 Windows 8 和 Windows Server 2012 附带的 Powershell 3.0 中添加了 >=3 的流。
  • 哦,废话,我想我只有 2.0 版,我无法升级它,因为我需要由公司中无法升级他们的机器的其他人运行这个脚本。这是 3.0 之前的方式吗?
  • 从 2010 年开始搜索“Invoke-Sqlcmd 详细流”就出现了这个问题。可能是您需要的答案。 stackoverflow.com/questions/4511498/…
【解决方案2】:

您可以将详细信息(以及所有其他控制台输出)保存到文件中,而不会使用Start-Transcript 污染您的输出流

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    相关资源
    最近更新 更多