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

时间:2017-06-10 17:32:49

标签: powershell

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
Windows 10上的

$PSVersionTable.PSVersion为“5.1.15063.296”。

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

2 个答案:

答案 0 :(得分:15)

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

  1. Alias
  2. 功能
  3. Cmdlet
  4. 原生Windows命令
  5. 如果命令名包含破折号或斜杠,并且在用完上面列表中的最后一个选项后没有找到任何命令,它会再次尝试,但是{{ 3}}

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

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

    Alias
    Item
    ChildItem
    

    ......等等。

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

    Trace-Command -Expression { date } -Name Command* -Option All -PSHost
    
    在此上下文中,

    Command*将匹配CommandSearchCommandDiscovery例程,并准确显示powershell用于解析命令名date

    的步骤

答案 1 :(得分:7)

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

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

  • 暂且不说:-All选项允许您查看具有较低优先级的相同名称的其他命令,但即使找不到-All date也未找到(并且,如果是,则应该列出 first ,与将其作为有效命令报告一致,不带-All)。

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

  • date -?Get-Help date不会返回Get-Date's帮助;相反,他们列出帮助主题包含单词 date

我创建了issue in the PowerShell GitHub repository