【发布时间】:2016-10-21 04:22:02
【问题描述】:
我编写了以下函数作为在 Powershell 中实现 *nix watch 命令的基本功能的基本方法:
function watch {
Param(
[Parameter(Mandatory=$true)][string]
$command,
[Parameter(Mandatory=$false)][int]
$n = 2
)
while($true) {
clear
Write-Output (iex $command)
sleep $n
}
}
使用返回 Powershell 对象的 cmdlet 时,我遇到了奇怪的行为。例如,如果我运行 `watch 'get-command ls',在第一次迭代中,我会得到对象的以下格式化输出:
CommandType Name Version Source
----------- ---- ------- ------
Alias ls -> Get-ChildItem
但在第二次和后续迭代中,它会截断对象属性标题(以及某些其他命令中的任何描述):
Alias ls -> Get-ChildItem
我很好奇为什么会发生这种行为,以及如何使所有后续迭代的输出与第一次迭代相同。我在 Windows 10 上的 Powershell 5.1 中运行它。
【问题讨论】:
-
因为
Format-Table隐含地通过管道输出不知道您清除屏幕,它只是继续打印表格,而不是打印新表格。
标签: windows powershell