首页 > 解决方案 > 为 IP 地址调用“解析”的异常 - 为什么?

问题描述

所以我正在更新一些东西。它以前使用过 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)

它会生成错误 - 使用“1”参数调用“Parse”的异常:“指定了无效的 IP 地址。” - 但 IP 是有效的。然后我注意到在 IP 之前似乎有一条额外的线,这样可以解释异常,但我无法摆脱这条线。我希望输出只是 IP 地址。无论如何,我无法解析 IP,并且 IP 之前的额外行使输出无用,因为它提供了一些其他代码,因为它在其余代码中被检测为无效 IP,而且当它真正看到额外的行时(我思考)。那么我在这里做错了什么?

标签: powershell

解决方案


返回的对象是一个数组,你需要指定你需要数组中的哪一项。

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)

推荐阅读