You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以下PowerShell代码重复输出信息消息?信息流是否有特殊属性?

为什么PowerShell中Write-Information会重复输出?

这个问题的核心在于Information流独有的双重处理机制,和Verbose、Warning这类流的行为有本质区别,咱们一步步拆解:

1. Write-Information的特殊双路径行为

和Write-Verbose/Write-Warning不同,Write-Information天生有两条输出路径:

  • 无论$InformationPreference设置如何,消息都会进入专门的Information流(Stream 6),这部分内容会被后台作业捕获,直到调用Receive-Job时才会被取出输出。
  • 当$InformationPreference设为Continue(而非默认的SilentlyContinue)时,消息还会直接输出到主机(控制台)。

2. 你的代码触发了两次输出的场景

看你的代码,当前会话和作业内部都设置了$InformationPreference = 'Continue',这就触发了双重输出:

  • 作业内部的处理:作业运行时,Write-Information 'information'因为作业内的偏好设置,会向作业的"内部主机"输出一条消息。但因为是后台作业,这部分输出不会直接弹到你的控制台,而是被作业对象捕获保存。
  • 当前会话的处理:当你调用Receive-Job时,作业捕获的所有流(包括Information流)会被发送到当前会话的对应流中。此时当前会话的$InformationPreference = 'Continue'会再次触发这条消息的主机输出。

最终,同一条信息就被输出了两次。

3. 为什么Verbose/Warning没有这个问题?

Write-Verbose和Write-Warning的行为是单一的:当它们的偏好设置为Continue时,消息只会进入对应的专用流(Verbose流/ Warning流),不会额外输出到主机。作业捕获这些流后,Receive-Job只会输出一次捕获到的内容,不会有重复。

验证结论的小测试

  • 如果把当前会话的$InformationPreference改回默认的SilentlyContinue,即使作业内部保持Continue,你只会看到一次information——作业捕获的Information流会被Receive-Job输出一次,当前会话不会再额外处理。
  • 如果作业内部设为SilentlyContinue,当前会话设为Continue,同样只会看到一次输出——作业只把消息写入Information流,当前会话处理Receive-Job的流时输出一次。

内容的提问来源于stack exchange,提问作者Zergatul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:45:39