Powershell:帮我停止闪烁!清除主机闪烁

时间:2017-10-06 22:01:29

标签: powershell console

我正在组合一个小演示,我希望一个控制台窗口显示当前状态。这是我的第一次迭代:

clear-host; while (1 -eq 1) { git log --graph --oneline; start-sleep -s 1; clear}

不幸的是,这会导致文字"闪烁"屏幕清除时每秒在屏幕上,然后替换为下一个结果。不仅美观上令人不愉快,它虽然很少见,对于一些毫无戒心的观众来说可能是危险的。所以我的下一次尝试是这样的:

clear-host; while (1 -eq 1) { git log --graph --oneline; start-sleep -s 1; [Console]::CursorTop=0;[Console]::CursorLeft=0;}

现在没有闪光,但只是向下拖动屏幕就不会清除更长的线条。

有人能想出一种方法来获得两全其美吗?当我有屏幕时清除屏幕,但没有重复闪烁?

1 个答案:

答案 0 :(得分:2)

您可以继续沿着控制台光标操作的路径继续,但PowerShell并非专门针对此方案而设计。

更好的选择是使用Write-Progress来显示真实的进度信息。

$activity = "Git 'er done"

for() {
    $result = & git log --graph --oneline
    Write-Progress -Activity $activity -Id 1 -Status ($result -join ', ')
    Start-Sleep -Seconds 1
}
Write-Progress -Activity $activity -Id 1 -Completed

(品尝季节)

-join $result的原因是,在我的回购中,git命令本身返回3行,而$result是一个数组。您可能想要决定如何处理特定情况,但请注意,$result 可以是一个数组,而Write-Progress将不接受。{/ p>

其他注意事项

Write-Progress在ISE中显示图形进度条,但在控制台主机(powershell.exe)和PowerShell Web Access中显示基于文本的进度条。换句话说,特定的PowerShell 主机应用程序决定了信息的显示方式,但它以支持的,定义的方式提供。

这意味着Write-Progress应该可以在任何环境中工作(它可能不会发生任何事情,或者什么也不显示,但它不应该崩溃)。

相比之下,直接控制台操作可能仅适用于ISE和控制台主机(不可否认它们可能是您唯一关心的主机),但如果您的代码突然托管在某个C#应用程序的运行空间中,则可能只是错误输出(我实际上不知道)。