在进行一些研究另一个问题,我想检查一下,确保这tree
不是真正的本机 PowerShell 命令或别名。当然,正确的方法是使用Get-Command
。但是,当我查找我不确定的命令时,我通常更喜欢直接转到帮助文件(如果存在),而不是执行“检查命令是否存在”的两步,然后转到帮助”。因此,我运行的命令是help tree
。令我惊讶的是,它返回了 Copy-Item 的帮助文件!
为了进行健全性检查,我将其拼写出来 - Get-Help tree
- 但最终得到了相同的结果。为了查看是否出于某种奇怪的原因,我运行了tree
的别名- 这返回了一个错误,指出这样的别名不存在。我运行以检查 的所有别名,结果只显示、和。Copy-Item
gal tree
gal -def Copy-Item
Copy-Item
copy
cp
cpi
最后,我gcm tree
查看了 PowerShell 实际应该使用的内容tree
。正如我所料,结果显示 CommandType 为“Application”,定义是“C:\Windows\system32\tree.com”。
不幸的是,这些都无法解释Get-Help
此处的异常行为。当两者看起来完全不相关时,为什么会Get-Help tree
返回帮助文件?此行为已在 Windows 7 SP1 上的 PowerShell 2.0 和 Windows 8.1 上的 PowerShell 4.0 中重复出现。Copy-Item
答案1
您之所以得到这个结果,是因为 Copy-Item 的帮助是仅有的系统中含有关键字“tree”的帮助文件。以下命令将显示字符串“tree”出现在示例部分的备注中。
(Get-Help -Name Copy-Item).examples.example.remarks | Where-Object { $_ -match 'tree'}
尝试以下命令,您会发现关键字“intact”对于该帮助文件来说也是唯一的。
Get-Help intact
这也解释了为什么使用其他语言环境找不到它。
例如,要获取包含关键字“particular”的帮助文件列表,请使用命令
Get-Help particular
我希望这可以澄清用法。