Почему Get-DnsClientServerAddress |выберите адрес AddressFamily не IPv4, а IPv6 - PullRequest
2 голосов
/ 10 мая 2019

Когда я набираю командлет Get-DnsClientServerAddress, я получаю все интерфейсы, которые есть у моего ПК, например

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

Поэтому, когда я наберу Get-DnsClientServerAddress | where AddressFamily -Like "4", я бы ожидал увидеть адаптер Ethernet.

Но по какой-то причине он не появился. Я набрал Get-DnsClientServerAddress | select AddressFamily и получил

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

Может кто-нибудь объяснить мне это?

Ответы [ 2 ]

3 голосов
/ 10 мая 2019

Как вы обнаружили, 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), а фактическое значение хранится в байтах, но отображается в КБ, поэтому некоторые манипуляции продолжаются для вывода по умолчанию.

1 голос
/ 10 мая 2019

Исходя из моего комментария, я бы использовал Get-NetIPAddress .

Get-NetIPAddress -InterfaceAlias "Ethernet" | Select-Object FamilyAddress
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...