为什么是Get-DnsClientServerAddress |选择AddressFamily输出而不是IPv4和IPv6

时间:2019-05-10 07:59:53

标签: powershell

例如,键入cmdlet Get-DnsClientServerAddress时,我将获得PC拥有的所有接口

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
Ethernet                             7 IPv4    {10.10.15.40, 10.10.25.44}

因此,当我输入Get-DnsClientServerAddress | where AddressFamily -Like "4"时,我希望看到以太网适配器。

但是由于任何原因它都没有出现。所以我输入了Get-DnsClientServerAddress | select AddressFamily,我得到的是

AddressFamily
-------------
            2
           23
            2
           23

有人可以向我解释吗?

2 个答案:

答案 0 :(得分:3)

如您所见,AddressFamily在内部使用(不太明显的)编号方案进行了分类,其中IPv4地址的类型为“ 2”。这来自基础的WMI类型(MSFT_DNSClientServerAddress),对于PowerShell来说不是问题。

默认显示可以将其翻译为IPv4等来帮助您,但是您不能对此进行过滤,因为它仅用于显示。但是,如果使用正确的值,您仍然可以过滤:

Get-DnsClientServerAddress | Where-Object AddressFamily -Like 2

这种用于显示目的的数据格式始终在PowerShell中发生,并且通过Format.ps1xml文件实现。例如,以表和列表格式比较Get-Process中工作集值的输出:

PS C:\> Get-Process powershell 

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    662      31    97928     110256       1.27  11452   2 powershell



PS C:\> Get-Process powershell | Format-List *

Handles                    : 705
VM                         : 2204040044544
WS                         : 113082368
PM                         : 100356096
NPM                        : 31512

该属性(为方便起见,由PowerShell自行添加)称为WS,但在表中显示为WS(K),实际值以字节为单位存储,但以KB显示,因此有些默认输出正在进行操作。

答案 1 :(得分:1)

在我的评论之后,我改用Get-NetIPAddress

Get-NetIPAddress -InterfaceAlias "Ethernet" | Select-Object FamilyAddress