PowerShell帮助文件未正确显示。

4

在Windows 10和Windows Server 2012上测试过,适用于PowerShell 4.0和5.0:

clear
help *-wmiobject*

或者

cls
man *-job*

清屏后,帮助文件无法正确显示结果。重新运行命令即可按预期工作。

Get-Help is unaffected.

这是什么原因呢?
谢谢。
2个回答

2

一个有趣的错误。原因(显然)是当Powershell显示help()调用的结果后,"搜索帮助"进度条被更新,有效地从顶部清除了第2到第9行的8行内容。解决方法是将结果存储在临时变量中。

$temp=help *-wmiobject; $temp

这样可以确保在显示内容之前函数已经退出,因此进度条将从窗口中删除。
更新:如果在help的参数中不包括星号,则该bug不存在。因此,可能会出现bug是因为显示是在help()的“Process”部分完成的,清除进度条的代码位于函数的“End”部分。

尝试使用“cls;help param;help param”命令,以查看进度条消失后清除了哪些内容 :) - JosefZ
@JosefZ 好的,从#3到#7共5行。哎呀。 - Vesper

1
我能够在64位Windows 8.1机器上的PowerShell控制台(32/64位)上重现此问题。简而言之,这与more.com DOS命令有关,该命令被manhelp使用,但不被Get-Help使用。 Get-Help, help, man:有什么区别?由Don Jones*更好地解释,并在this $Script Fanatic blog post中阐述:

differences explained

更多
按照博客文章中所述运行(Get-ChildItem function:\help).definition,您将在底部看到以下内容:

Get-Help @PSBoundParameters | more

help基本上是将参数绑定到Get-Help Cmdlet并将其管道传递到more。因此,除了您发布的内容外,如果您使用以下内容,也会遇到同样的问题:

clear
Get-Help *et-WmiObjec* | more # doesn't work

我认为默认情况下,Get-Help 使用 Out-Host 输出信息(需要引用)。使用 Write-Output 也可以。
clear
help *-wmiobject* | Out-Host # works

clear
man *-wmiobject* | Out-Host # works 

最后,当man/help返回多个结果时,会出现此问题。
clear
man get-WmiObject # works

我建议查看文档和帮助函数以进行调查。根据 (Get-ChildItem function:\more).definition 的结果,我怀疑它与处理数组/对象与字符串有关,但这超出了我的知识范围。
param([string[]]$paths)

$OutputEncoding = [System.Console]::OutputEncoding

if($paths)
{
    foreach ($file in $paths)
    {
        Get-Content $file | more.com
    }
}
else
{
    $input | more.com
}

*PowerShell午餐时间,第二版,第23页


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接