gpt4 book ai didi

powershell - 在不启用 -Verbose 的情况下捕获详细流

转载 作者:行者123 更新时间:2023-12-03 00:42:52 26 4
gpt4 key购买 nike

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

如果我有文件 verboseTest.ps1

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

如果我调用 .\verboseTest.ps1 ,我没有看到任何预期。

如果我调用 .\verboseTest.ps1 -Verbose我看到了输出。

VERBOSE: verbose test outer



正如预期的那样。

但是如果我调用 .\verboseTest.ps1 4>&1我不。详细流丢失。

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

我有文件 infoTest.ps1它表现得很清醒。

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

如果我调用 .\infoTest.ps1 ,我没有看到任何预期。

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

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

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

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

最佳答案

不幸的是, 详细流(流号 4 )在未显式打开时不仅是静默的,而且没有数据写入其中。

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

在 PowerShell 的默认静默输出流 - 详细 (4)、调试 (5) 和信息 (6) - 中,信息流是唯一的异常(exception):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 调用仍然可能产生副作用,例如在传递可扩展字符串作为包含的消息时具有副作用的子表达式 ( $(...))。

关于powershell - 在不启用 -Verbose 的情况下捕获详细流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com