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
是什么?
答案 0 :(得分:15)
PowerShell CommandDiscovery API使用the following precedence order将命令名解析为命令:
如果命令名不包含破折号或斜杠,并且在用完上面列表中的最后一个选项后没有找到任何命令,它会再次尝试,但是{{ 3}}
因此,Get
动词也称为默认命令动词。
这适用于任何Get-*
命令,该命令与$env:path
中的现有别名,函数或cmdlet名称或本机可执行文件无冲突,如:
Alias
Item
ChildItem
......等等。
如果您再次想知道为什么命令以某种方式得到解决,您可以使用with Get-
prepended从powershell引擎获取调试级别的信息:
Trace-Command -Expression { date } -Name Command* -Option All -PSHost
在此上下文中, Command*
将匹配CommandSearch
和CommandDiscovery
例程,并准确显示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
。