2015-07-11 1 views
0

Я создаю сценарий Powershell, который должен автоматизировать первоначальную настройку машины Windows. Для некоторых операций мне понадобится IP-адрес машины, но поскольку мы являемся частью большой группы (не уверены в терминологии), и есть вероятность, что в какой-то момент одно и то же имя хоста может быть связано с двумя или более IP-адресами, которые я хочу для получения всех IP-адресов IPv4 и на основе результата (если есть только 1 на несколько), чтобы написать некоторую логику.Как получить только IPv4-адреса для имени хоста

Сейчас у меня есть это:

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

, но когда я исполню $ips.Count сразу после я получаю 2 и когда я делаю следующее:

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

получается, что я получил IPv4 и (почти) IPv6-адресов.

Если я уверен, что это всегда будет так, все в порядке, но поскольку я хочу проверить несколько адресов IPv4, и мне не нужен IPv6, как я могу взять только IPv4 и проверить их счет?

ответ

5

Отфильтровать результат по номеру GetHostAddresses(). Адреса IPv4 имеют семейство адресов InterNetwork, в то время как адреса IPv6 имеют семейство адресов InterNetworkV6.

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

@($ips).Count 
+0

Спасибо. Это работает точно так, как мне было нужно! – Leron

Смежные вопросы