【问题标题】:How to get only IPv4 address(es) for a hostname如何仅获取主机名的 IPv4 地址
【发布时间】:2017-02-20 06:31:37
【问题描述】:

我正在编写一个 Powershell 脚本,该脚本必须自动化 Windows 机器的初始设置。对于某些操作,我将需要机器 IP,但由于我们是一个大组的一部分(不确定术语),并且有可能在某些时候相同的主机名可能与我想要的 2 个或多个 IP 相关联获取所有 IPv4 IP 地址并根据结果(如果只有 1 对多个)编写一些逻辑。

现在我有这个:

$ips = [System.Net.Dns]::GetHostAddresses("myhostname")

但是当我在得到2 之后立即执行$ips.Count 并且当我执行以下操作时:

[System.Net.Dns]::GetHostAddresses("myhostname") | foreach {echo $_.IPAddressToString }

事实证明,我得到了 IPv4 和(几乎)IPv6 地址。

如果我确定这种情况总是如此,那没关系,但由于我想检查多个 IPv4 地址,而我根本不需要 IPv6,我如何才能只取 IPv4 并检查它们的数量?

【问题讨论】:

    标签: powershell ip


    【解决方案1】:

    按地址族过滤GetHostAddresses() 调用的结果。 IPv4 地址的地址族为InterNetwork,而IPv6 地址的地址族为InterNetworkV6

    $ips = [Net.Dns]::GetHostAddresses('myhostname') |
           Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
           Select-Object -Expand IPAddressToString
    
    @($ips).Count
    

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2022-06-28
      • 2012-12-09
      • 2011-10-03
      • 2020-12-10
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多