Powershell控制台缓冲区随机出现神秘空白space

Mysterious blank space randomly appears in Powershell console buffer

我被一个很奇怪的现象所困扰。我倾向于为我在工作中所做的事情编写相当深奥的 Powershell 模块。通常,在 运行 完成其中一项之后,模块结束后,我将继续执行其他一些任务,当我碰巧再次打开我的 Powershell 控制台 window 时,几个空行(或只是空行"space") 将出现在缓冲区中。它永远不会立即出现,这是最令人困惑的部分。

之后,闪烁的光标存在于这个空白space的末尾,而空白space不能是“backspaced”(所以不是不小心输入了spaces 或换行)。它就在那里,作为缓冲区的一部分。我通常只是用 cls 清屏,以免它烦我。

我过去常常把这归因于有问题的 Windows Powershell 5.1 缓冲。但是现在我已经开始使用 Powershell 7(和 Windows 终端),我发现问题仍然存在。

这是我的模块完成后一个小时左右的 v7 Windows 终端选项卡的屏幕截图 运行ning:

有时似乎我等待的时间越长,出现的空白space就越多。这是大约 20 小时后同一控制台选项卡的屏幕截图:

很抱歉,我没有更好的解释方式。我意识到没有任何代码或模式可以分析,按照 SO 标准,这是一个非常糟糕的问题,但我和你一样困惑。我注意到的唯一模式是,这似乎只发生在我 运行 我的各种自定义模块之后。然而,这占了我 Powershell 使用的大部分,所以它可能是一个转移注意力的问题。

通常我的模块只是做一些处理(与计算机、AD 等对话)并通过 Write-Host 输出一些信息,偶尔输出一个 [PSCustomObject],我总是将其捕获在一个变量中.即使我不小心向管道输出了一些空白行或其他内容,我也看不出这将如何表现为随着时间的推移而增长的空白缓冲区 space。我想也许我错误地杀死了异步作业或其他东西,这是以某种方式导致的,但即使在纯同步代码中也会发生这种情况。

要清楚,在上面的屏幕截图中实际上没有代码 运行ning。该模块是我在这个特定控制台 tab/session 中唯一 运行 的东西,它没有 运行 任何后台进程。所以我不明白为什么缓冲区会自行改变。在两个屏幕截图中,tab/window 的大小与模块首次完成时的大小相同,因此不仅仅是缓冲区中的一堆 space 正在动态调整大小。如前所述,当模块完成时,缓冲区中根本没有恶意字符。

关于我的使用的另一件事是,它全部在远程 VM 上完成,通过我每天使用的 RDP 访问。我唯一能想到的另一件事是,可能与控制台 window 为 minimized/maximized/resized、分辨率更改或登录会话为 connected/reconnected 有关。

这听起来很熟悉吗?非常感谢任何关于可能导致此问题的想法或我可以尝试更好地理解该行为的想法。

我已经确认这实际上是简单地“恢复”和“最大化”Powershell 控制台的直接结果 window and/or Windows 终端 window .当问题“存在”时,这样做通常会在光标之前的缓冲区中添加另一“组”空白 space。最小化似乎没有效果,只能从最大化到“恢复”再回到最大化。

我也确认这与我的自定义模块无关。我可以通过简单地打开一个新的、最大化的控制台 window/tab、运行 get-process 然后“恢复”和最大化来重现该问题。不过也不是每次都这样。

它也与我的自定义配置文件脚本无关,因为即使在没有配置文件的新镜像计算机上也会发生这种情况。

在这一点上,我要回过头来将其归咎于 buffer/rendering/window 管理器在 powershell 中的实现错误并继续我的生活。