如何避免powershell select-object将枚号显示为数字?

时间:2016-10-11 13:16:38

标签: powershell

Get-DnsClientServerAddress打印:

InterfaceAlias               Interface Address ServerAddresses                                                                                                                                                                                       
                             Index     Family                                                                                                                                                                                                        
--------------               --------- ------- ---------------                                                                                                                                                                                       
Ethernet0                            3 IPv4    {192.168.0.1}    

Get-DnsClientServerAddress | select-object AddressFamily打印:

AddressFamily
-------------
            2

问题:如何使用枚举字符串而不是数字来实现输出(如下所示:)

AddressFamily
-------------
         IPv4

2 个答案:

答案 0 :(得分:1)

您可以创建自定义选择表达式,该表达式使用相应的字符串值更改地址系列编号值。正如@Ansgar建议您可以使用查找表$af来切换出这些值。

$af = @{'2'='IPv4';'23'='IPv6'}

Get-DnsClientServerAddress | Select InterfaceAlias,InterfaceIndex,@{
    Name="AddressFamily";
    Expression={$af[$_.AddressFamily.ToString()]}
},ServerAddresses

如果您将此输出捕获到变量中,则可以像$Variable.AddressFamily那样选择地址系列,并且您将获得以太IPv4IPv6而不是其数值。< / p>

答案 1 :(得分:1)

AddressFamily显示值使用我们也可以使用的内部枚举:

Get-DnsClientServerAddress |
    Select InterfaceAlias, @{N='AddressFamily'; E={[Microsoft.PowerShell.Cmdletization.GeneratedTypes.DnsClientServerAddress.AddressFamily]$_.AddressFamily}}
InterfaceAlias                                AddressFamily
--------------                                -------------
Ethernet                                               IPv4
Ethernet                                               IPv6
Loopback Pseudo-Interface 1                            IPv4
Loopback Pseudo-Interface 1                            IPv6
isatap.{B9F500B1-943E-4B8C-BCAF-A669F1B0969F}          IPv4
isatap.{B9F500B1-943E-4B8C-BCAF-A669F1B0969F}          IPv6
Teredo Tunneling Pseudo-Interface                      IPv4
Teredo Tunneling Pseudo-Interface                      IPv6

要快速获取长枚举名称,只需在PS ISE中键入[addressf,然后按 Ctrl - Space 即可显示候选人(Win10中的两个),然后在其工具提示中选择cmdlet的那个(Win10中的第二个)。