4

几年前,我偶然在 VMware PowerCLI 中偶然发现了一个“隐藏”的 PowerShell 别名vc,它可以用来代替Connect-ViServer. 这个vc命令对两者都是不可见的Get-CommandGet-Alias它不能被命令完成识别(不是你真的需要它),我只能Connect-ViServer通过它的输出和行为将它联系起来。

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

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

这是我的 3 字母别名的(快速而肮脏的)脚本,它在我的系统上运行了大约一个小时(!),除了缩短的 Get-* 命令之外什么也没找到:(
注意:不建议像我一样盲目地运行随机命令)

$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 {}
            }
        }
    }
}
4

2 回答 2

3

正如我在评论中已经说过的那样,PowerShell 不需要Get-ofGet-*命令,例如Get-Vhd. 相反,您只需键入Vhd. 话虽如此,您可以检查Connect-ViServer.

Get-Alias -Definition Connect-ViServer
-----------     ----        
Alias           Get-ESX     
Alias           Get-VC      
Alias           Get-VIServer

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

于 2020-01-04T21:43:31.240 回答
0

从理论上讲,这应该有效。我不知道为什么它不显示像“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 {}

似乎别名是在模块文件shrug中导出的。VMware.VimAutomation.Core.psd1,第 46 行。

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

VMware.VimAutomation.Core\11.5.0.14899560\net45\VMware.VimAutomation.Core.ps1:145:set-alias Get-VC Connect-VIServer
-Scope Global
VMware.VimAutomation.Core\11.5.0.14899560\netcoreapp2.0\VMware.VimAutomation.Core.ps1:145:set-alias Get-VC
Connect-VIServer -Scope Global
VMware.VimAutomation.Core\11.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
于 2020-01-04T17:03:13.427 回答