Исключение вызывает "Parse" для IP-адреса - почему? - PullRequest
0 голосов
/ 04 июля 2019

Так что я что-то обновляю. Ранее он использовал whoami.akamai.net, но его заменяет whoami.ds.akahelp.net (и / или протокол whoami.ipv4.akahelp.net и whoami.ipv6.akahelp.net). Так что нужно обновить. Во всяком случае, когда я делаю это

$ips = (((Resolve-DnsName 'whoami.ds.akahelp.net' -QuickTimeout -Type txt).Strings) -replace 'ns','').Trim();
$ips = [System.Net.IPAddress]::Parse($ips)

Генерирует ошибку - Исключение вызывает "Parse" с аргументом (ами) "1": "Указан неверный IP-адрес". - но IP действителен. Затем я заметил, что перед IP-адресом есть лишняя строка, которая учитывает исключение, но я не могу избавиться от этой строки. Я ожидал, что на выходе будет только IP-адрес. В любом случае, я не могу разобрать IP, и дополнительная строка перед тем, как IP делает вывод бесполезным, когда он передает какой-то другой код, потому что он обнаруживается как недопустимый IP в остальной части кода, также когда он действительно видит эту дополнительную строку (я считать). Так что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Возвращаемый объект является массивом, вам нужно указать, какой элемент в массиве вам нужен.

PS C:\Users\jacob> $ips

81.134.99.118

PS C:\Users\jacob> $ips.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                           
-------- -------- ----                                     --------                                                                                                           
True     True     Object[]                                 System.Array                                                                                                       



PS C:\Users\jacob> $ips[1]
81.134.99.118

PS C:\Users\jacob> $ips[1].GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                           
-------- -------- ----                                     --------                                                                                                           
True     True     String                                   System.Object                                                                                                      

Таким образом, с помощью имеющегося кода, чтобы указать элемент в нужном массиве, вы можетенапишите это следующим образом:

$ips = (Resolve-DnsName 'whoami.ds.akahelp.net' -QuickTimeout -Type txt).Strings[1].Trim()
$ips = [System.Net.IPAddress]::Parse($ips)
0 голосов
/ 05 июля 2019

Я думаю, что это должно сделать
$ips = (Resolve-DnsName 'whoami.ds.akahelp.net' -QuickTimeout -Type txt).Strings[1] $ips = [System.Net.IPAddress]::Parse($ips)

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