【发布时间】:2017-11-03 18:45:29
【问题描述】:
在 Windows 10 和 Windows Server 2012 上的 PowerShell 4.0、5.0 中测试:
clear
help *-wmiobject*
或
cls
man *-job*
清屏后帮助文件无法正确显示结果。重新运行命令,它按预期工作。
Get-Help is unaffected.
这是什么原因?
谢谢
【问题讨论】:
标签: powershell
在 Windows 10 和 Windows Server 2012 上的 PowerShell 4.0、5.0 中测试:
clear
help *-wmiobject*
或
cls
man *-job*
清屏后帮助文件无法正确显示结果。重新运行命令,它按预期工作。
Get-Help is unaffected.
这是什么原因?
谢谢
【问题讨论】:
标签: powershell
一个有趣的错误。原因(显然)是Powershell显示help()调用的结果后更新了“搜索帮助”的进度条,有效地从顶部清除了从第2行到第9行的8行。解决方法是将结果存储在临时变量中。
$temp=help *-wmiobject; $temp
这确保函数在显示内容之前已经退出,因此进度条已经从窗口中移除。
更新:如果您不在 help 的参数中包含星号,则该错误不存在。因此,可能会出现这个bug,因为显示是在help()的“进程”部分完成的,而清除进度条的代码位于函数的“结束”部分。
【讨论】:
cls;help param;help param 看看进度条消失后清除了什么:)
我能够在两个 PowerShell 控制台(32/64 位)上的 64 位 Windows 8.1 机器上重现此问题
短版是与more.com DOS command 相关,man 和 help 使用但不是Get-Help。
Get-Help,帮助,伙计:有什么区别?
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 午餐月,第 2 版,第 23 页
【讨论】: