我正在编写一个Powershell
脚本,必须自动化Windows机器的初始设置。对于某些操作,我将需要机器IP,但由于我们是一个大型组的一部分(不确定术语),并且在某些时候相同的主机名可能与2相关联。或更多IP我希望得到所有IPv4 IP地址,并根据结果(如果只有1个多个)来编写一些逻辑。
现在我有这个:
$ips = [System.Net.Dns]::GetHostAddresses("myhostname")
但是当我得到$ips.Count
之后立即执行2
以及执行以下操作时:
[System.Net.Dns]::GetHostAddresses("myhostname") | foreach {echo $_.IPAddressToString }
事实证明我得到了IPv4和(差不多)IPv6地址。
如果我确定这种情况一直都可以,但是由于我想检查多个IPv4地址而我根本不需要IPv6,我怎么能只使用IPv4并查看他们的数量?
答案 0 :(得分:6)
按地址系列过滤GetHostAddresses()
来电的结果。 IPv4地址具有地址系列InterNetwork
,而IPv6地址具有地址系列InterNetworkV6
。
$ips = [Net.Dns]::GetHostAddresses('myhostname') |
Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
Select-Object -Expand IPAddressToString
@($ips).Count