我正在尝试重复 *nix
watch
johnrizzo1 here 提供的功能。
function Watch {
[CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
param (
[Parameter(Mandatory=$False,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[int]$n = 10,
[Parameter(Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[string]$command
)
process {
$cmd = [scriptblock]::Create($command);
While($True) {
Clear-Host;
Write-Host "Command: " $command;
$cmd.Invoke();
sleep $n;
}
}
}
Export-ModuleMember -function Watch
watch -n 1 '$PSVersionTable.PSVersion'
问题是只有第一次运行才显示标题。之后看起来很丑,因为标题被从输出中删除:
Command: $PSVersionTable.PSVersion
5 0 10586 117
顺便说一句,上面链接中
watch
的所有其他 PS 解决方案都遇到同样的问题。
这现在可以工作了,但是您的输出被迫通过管道传输到 Format-Table,因此它将始终采用表格式。
function Watch {
[CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
param (
[Parameter(Mandatory=$False,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[int]$n = 10,
[Parameter(Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[string]$command
)
process {
$cmd = [scriptblock]::Create($command)
While($True) {
Clear-Host
Write-Host "Command: " $command
$cmd.Invoke() | Format-Table -HideTableHeaders:$false
sleep $n
}
}
}
watch -n 1 '$PSVersionTable.PSVersion'
很可能这还有其他问题,但只是改变
$cmd.invoke();
到
$cmd.invoke() | ft;
对我有用
试试这个 - 通过 -RepeatHeader 参数传送命令。
$cmd.Invoke() | Format-Table -RepeatHeader:$true
对于我的问题,我在每个 PS 命令之间清除屏幕,Powershell 仅在第一次运行时显示表标题。 -RepeatHeader 参数旨在当输出填满整个页面时重新呈现表头,并在每个页面上重新呈现表头。就我的目的而言,在 Clear-Host 命令之后在同一脚本块中重新运行相同的命令时,它起作用了
function Watch {
[CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
param (
[Parameter(Mandatory=$False,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[int]$n = 10,
[Parameter(Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[string]$command
)
process {
$cmd = [scriptblock]::Create($command)
While($True) {
Clear-Host
Write-Host "Command: " $command
$cmd.Invoke() | Format-Table -RepeatHeader:$true
sleep $n
}
}
}
watch -n 1 '$PSVersionTable.PSVersion'