【问题标题】:Capture verbose stream without enabling -Verbose在不启用 -Verbose 的情况下捕获详细流
【发布时间】:2019-11-09 21:21:23
【问题描述】:

也许在 PowerShell 中没有办法做到这一点。

如果我有文件verboseTest.ps1

[CmdletBinding()]    # CmdletBinding attribute enables -verbose flag
Param()
Write-Verbose 'verbose test'

如果我打电话给.\verboseTest.ps1,我没有看到任何预期的结果。

如果我打电话给.\verboseTest.ps1 -Verbose,我会看到输出。

VERBOSE:详细测试外部

正如预期的那样。

但如果我打电话给.\verboseTest.ps1 4>&1 我不会。详细流丢失。

现在,Info 的行为完全不同了。

我有文件infoTest.ps1,它的行为很正常。

[CmdletBinding()]    # Add CmdletBinding attribute
Param()
Write-Information 'info test outer'

如果我打电话给.\infoTest.ps1,我没有看到任何预期的结果。

如果我调用.\infoTest.ps1 -InformationAction 'Continue',这类似于-Verbose 标志,它会成功并将info test outer 输出到控制台。

如果我调用.\infoTest.ps1 6>&1,它info test outer 输出到控制台!所以不知何故,“信息”流的行为与“详细”流完全不同。

信息流的行为是有意义的。写入信息命令写入流,我可以重定向它或查看或不查看我认为合适的。 “冗长”没有!我必须启用在输出中显示它才能重定向它?难道我做错了什么?这有什么意义?

我是否启用详细首选项以重定向输出?如果是这样,我可以在方法内部执行此操作还是在全局会话范围内更改它?

【问题讨论】:

    标签: powershell verbose


    【解决方案1】:

    不幸的是,详细流(流号 4)在未明确打开时不仅静默,而且没有数据写入 .

    也就是说,Write-Verbose 语句是有效的no-ops[1],除非 -Verbose 被传递或首选项变量 $VerbosePreference 设置为 @987654326 @。


    在 PowerShell 的默认静默输出流中 - 详细 (4)、调试 (5) 和信息 (6) - 信息流是唯一的例外:Write-Information 语句 总是给它写信,不管它是否被静音。


    将首选项变量 $VerbosePreference 设置为 Continue 会为当前作用域和任何子作用域中的所有命令开启详细输出 - 但有一个重要例外

    高级功能模块中实现,从脚本调用时只能看到$VerbosePreference全局实例;相比之下,二进制 cmdlet 不受影响。 this GitHub issue 中讨论了这种高度成问题的行为。

    您可以按如下方式解决该问题:

    # Create a script-local copy of the global parameter-defaults
    # hashtable.
    # Note: If you want to clear the global presets, call .Clear()
    #       after cloning.
    $PSDefaultParameterValues = $PSDefaultParameterValues.Clone()
    
    # Preset the -Verbose switch for all commands that support it.
    $PSDefaultParameterValues['*:Verbose'] = $true
    
    # ... call commands, which will behave as if -Verbose had been passed.
    

    [1] 但是,该 cmdlet 仍被调用,这意味着您传递给它的参数会被评估,因此假设静默 Write-Verbose 调用仍然可能具有副作用,例如将可扩展字符串作为包含具有副作用的子表达式 ($(...)) 的消息传递时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2022-08-05
      • 2011-02-07
      相关资源
      最近更新 更多