在循环中运行Powershell命令时截断输出
我编写了以下函数作为在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。
我认为这是因为你正在混合Write-Output
,写入管道,并clear
哪个是正确命名的Clear-Host
并清除本地终端,并且不知道管道。 Write-Host
更好。
由于你的函数永远是循环的,所以管道输出永远不会结束,所以你会得到的是这个无尽的列表和一组标题:
CommandType Name Version Source
----------- ---- ------- ------
Alias ls -> Get-ChildItem
Alias ls -> Get-ChildItem
Alias ls -> Get-ChildItem
Alias ls -> Get-ChildItem
Alias ls -> Get-ChildItem
Alias ls -> Get-ChildItem
但是您清除列表中间的/ display /,所以它会继续打印后续项目,而不显示标题。
如果您在命令中明确写入Format-Table
,则可以重复标题:
watch { Get-Alias ls | Format-Table }
链接地址: http://www.djcxy.com/p/30245.html
上一篇: Truncated output when running Powershell command in a loop