什么是“约会”? “Get-Command date”抛出CommandNotFoundException

问题描述 投票:13回答:2

date工作:

PS> date

Saturday, June 10, 2017 9:10:11 AM

Get-Command date抛出异常:

PS> Get-Command date
Get-Command : The term 'date' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Get-Command date
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (date:String) [Get-Command], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand

此外Get-Alias date抛出异常:

PS> Get-Alias date
Get-Alias : This command cannot find a matching alias because an alias with the name 'date' does not exist.
At line:1 char:1
+ Get-Alias date
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (date:String) [Get-Alias], ItemNotFoundException
    + FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand

$PSVersionTable.PSVersion在Windows 10上是“5.1.15063.296”。

date似乎不是cmdlet,函数,脚本文件,可操作程序或别名。那么,什么是date

powershell
2个回答
15
投票

PowerShell CommandDiscovery API使用the following precedence order将命令名解析为命令:

  1. 别号
  2. 功能
  3. 小命令
  4. 本机Windows命令

如果命令名称不包含破折号或斜杠,并且在用完上面列表中的最后一个选项后没有找到命令,它将再次尝试,但是with Get- prepended

因此,Get动词也称为默认命令动词。

这适用于任何与现有别名,函数或cmdlet名称或Get-*中的本机可执行文件不冲突的$env:path命令,如:

Alias
Item
ChildItem

... 等等。


如果您再次想知道为什么命令以某种方式得到解决,您可以使用Trace-Command cmdlet从powershell引擎获取调试级别信息:

Trace-Command -Expression { date } -Name Command* -Option All -PSHost

在这种情况下,Command*将匹配CommandSearchCommandDiscovery例程,并向您显示powershell用于解析命令名称date的确切步骤


7
投票

补充Mathias R. Jessen's helpful answer,它很好地解释了命令发现过程:

Get-Command不知道默认动词逻辑,因此不会报告在使用给定命令名时实际执行的相同命令是应该修复的不一致,因为这是给定命令名时的目的。

  • 另外:-All选项允许您查看具有较低优先级的相同名称的其他命令,但即使找不到-All date(如果是,则应首先列出,与报告为有效的命令,没有-All)。

同样,Get-Help-?也不知道默认动词逻辑:

  • qazxsw poi和qazxsw poi不返回qazxsw poi帮助;相反,他们列出了包含单词date -?的帮助主题。

我创造了一个Get-Help date

© www.soinside.com 2019 - 2024. All rights reserved.