PowerCLI 有一个隐藏的 vc 别名,我不知道它来自哪里以及是否有更多类似的别名

PowerCLI has an hidden vc alias, I can't figure where it comes from and whether there's more of its like

几年前,我在 VMware PowerCLI 中偶然发现了一个 "hidden" PowerShell 别名 vc,可以用来代替 Connect-ViServer。 这个 vc 命令对 Get-CommandGet-Alias 都是不可见的,它不能被命令完成识别(不是你真的需要它),我只能将它与 Connect-ViServer 根据其输出和行为。

我发现这个特定的伪别名在我的 PowerCLI 工作中非常有用,我一直想知道它是如何工作的,以及是否还有其他这样的隐藏快捷方式。 今天,我在我的系统中搜索了 Get-Command 未知的 2 个字母和 3 个字母的命令,唯一出现在 vc 旁边的是缩短的 Get-* 命令(如下面的@vrdse 所解释的)。

  1. 谁能解释一下 where/how 这个 vc 伪别名是如何定义的?
  2. 我怎样才能比使用下面的脚本或靠运气更有效地找到类似的隐藏命令?

这是我的 3 字母别名的(快速而肮脏的)脚本,运行 在我的系统上运行了大约一个小时(!),除了缩短的 Get-* 命令外什么也没发现:
(注意:不推荐像我那样盲目地 运行 运行dom 命令)

$az = [char[]]('a'[0]..'z'[0])
foreach ($i in $az) {
    write $i
    foreach ($j in $az) {
        write $i$j
        foreach ($k in $az) {
            if (!(gcm -ea ig $i$j$k)) {
                try {iex $i$j$k; write-warning $i$j$k} catch {}
            }
        }
    }
}

理论上,这应该可行。我不知道为什么它不显示像 "dir" 这样的常见别名(是的,它们在引擎 https://github.com/PowerShell/PowerShell/issues/8970 中定义):

get-module -ListAvailable | select name,exportedaliases

哦,Powershell,你是如此多变和神秘。 ExportedAliases 好像用处不大。

gcm get-vc

CommandType     Name       Version    Source
-----------     ----       -------    ------
Alias           Get-VC     11.5.0.... VMware.VimAutomation.Core


get-module VMware.VimAutomation.Core | select name, exportedaliases

Name                      ExportedAliases
----                      ---------------
VMware.VimAutomation.Core {}

好像别名是在模块文件中导出的,耸耸肩。 VMware.VimAutomation.Core.psd1,第 46 行。

PS C:\Users\js\Documents\WindowsPowerShell\Modules> ls -r * | select-string get-vc

VMware.VimAutomation.Core.5.0.14899560\net45\VMware.VimAutomation.Core.ps1:145:set-alias Get-VC Connect-VIServer
-Scope Global
VMware.VimAutomation.Core.5.0.14899560\netcoreapp2.0\VMware.VimAutomation.Core.ps1:145:set-alias Get-VC
Connect-VIServer -Scope Global
VMware.VimAutomation.Core.5.0.14899560\VMware.VimAutomation.Core.psd1:46:AliasesToExport = @('Answer-VMQuestion','Ap
ply-DrsRecommendation','Apply-VMHostProfile','Export-VM','Get-ESX','Get-PowerCLIDocumentation','Get-VC','Get-VIServer',
'Get-VIToolkitConfiguration','Get-VIToolkitVersion','Set-VIToolkitConfiguration','Shutdown-VMGuest')

我是这样理解的。

Get-Command -Module VMware.VimAutomation.Core -CommandType Alias

CommandType Name                       Version         Source
----------- ----                       -------         ------
Alias       Answer-VMQuestion          11.5.0.14899560 VMware.VimAutomation.Core
Alias       Apply-DrsRecommendation    11.5.0.14899560 VMware.VimAutomation.Core
Alias       Apply-VMHostProfile        11.5.0.14899560 VMware.VimAutomation.Core
Alias       Export-VM                  11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-ESX                    11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-PowerCLIDocumentation  11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-VC                     11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-VIServer               11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-VIToolkitConfiguration 11.5.0.14899560 VMware.VimAutomation.Core
Alias       Get-VIToolkitVersion       11.5.0.14899560 VMware.VimAutomation.Core
Alias       Set-VIToolkitConfiguration 11.5.0.14899560 VMware.VimAutomation.Core
Alias       Shutdown-VMGuest           11.5.0.14899560 VMware.VimAutomation.Core

alias | ? source -match vmware

正如我在评论中所述,PowerShell 不需要 Get-Get-* 命令,例如 Get-Vhd。相反,您可以只键入 Vhd。也就是说,您可以检查 Connect-ViServer.

的别名
Get-Alias -Definition Connect-ViServer
-----------     ----        
Alias           Get-ESX     
Alias           Get-VC      
Alias           Get-VIServer

你看,实际上它有一些别名。其中之一是Get-VC,因此vc是可能的。