PowerShell получает конкретный элемент вывода командлета - PullRequest
0 голосов
/ 15 апреля 2019

Как я могу получить значение определенного элемента из вывода командлета в PowerShell?

Например, я использую [System.Net.DNS] :: GetHostAddresses ("google.com"), чтобы получитьIP-адрес домена.Вывод также содержит некоторые дополнительные значения, и я хочу извлечь только значение поля «IPAddressToString».

PS C:\Windows\system32> [System.Net.DNS]::GetHostAddresses("google.com")

Address           : 3456489900
AddressFamily     : InterNetwork
ScopeId           :
IsIPv6Multicast   : False
IsIPv6LinkLocal   : False
IsIPv6SiteLocal   : False
IPAddressToString : 172.217.5.206

Я передал выходные данные вышеприведенной команды в Get-Member, как показано ниже:

PS C:\Windows\system32> [System.Net.DNS]::GetHostAddresses("google.com") | Get-Member -Name IPAddressToString


   TypeName: System.Net.IPAddress

Name              MemberType     Definition
----              ----------     ----------
IPAddressToString ScriptProperty System.Object IPAddressToString {get=$this.Tostring();}

Отображает только свойство, но не его значение.

Предоставляет ли PowerShell метод для извлечения этих значений из выходных данных команды?

Спасибо.

1 Ответ

2 голосов
/ 15 апреля 2019

причина, по которой Get-Member не дает желаемого результата, состоит в том, что он показывает имя / тип / информацию о структуре, но не значения . [ ухмылка ], если вы хотите увидеть значения свойств элемента, используйте $Item | Select-Object -Property *, чтобы показать все реквизиты и их значения.

чтобы получить значение, которое вы хотите использовать в скрипте, используйте точечную нотацию, чтобы получить значение ... вот так ...

@([System.Net.DNS]::GetHostAddresses("google.com")).IPAddressToString[1]

, который даст вам значение 2-го элемента в массиве IP-адресов, возвращаемых вызовом. в моей системе это адрес IPv4 - элемент [0] является адресом IPv6.

как вы обнаружили, другой способ получить ту же информацию - это перенаправить командлет Select-Object следующим образом ...

([System.Net.DNS]::GetHostAddresses("google.com") |
    Select-Object -ExpandProperty 'IPAddressToString')[1]

Если вы хотите быть уверены, что получите желаемый тип адреса, используйте что-то вроде этого ...

@([System.Net.DNS]::GetHostAddresses("google.com")).
    Where({$_.AddressFamily -eq 'Internetwork'}).
    IPAddressToString

, который получает адреса от цели, фильтрует адрес IPv4, а затем дает значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...