在Windows 10和Windows Server 2012上测试过,适用于PowerShell 4.0和5.0:
clear
help *-wmiobject*
或者
cls
man *-job*
清屏后,帮助文件无法正确显示结果。重新运行命令即可按预期工作。
Get-Help is unaffected.
这是什么原因呢?
谢谢。
在Windows 10和Windows Server 2012上测试过,适用于PowerShell 4.0和5.0:
clear
help *-wmiobject*
或者
cls
man *-job*
清屏后,帮助文件无法正确显示结果。重新运行命令即可按预期工作。
Get-Help is unaffected.
一个有趣的错误。原因(显然)是当Powershell显示help()
调用的结果后,"搜索帮助"进度条被更新,有效地从顶部清除了第2到第9行的8行内容。解决方法是将结果存储在临时变量中。
$temp=help *-wmiobject; $temp
help
的参数中不包括星号,则该bug不存在。因此,可能会出现bug是因为显示是在help()
的“Process”部分完成的,清除进度条的代码位于函数的“End”部分。more.com
DOS命令有关,该命令被man
和help
使用,但不被Get-Help
使用。
Get-Help, help, man:
有什么区别?由Don Jones*更好地解释,并在this $Script Fanatic blog post中阐述:
更多
按照博客文章中所述运行(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页