Хотите поместить IP-адрес v4 моего конкретно названного адаптера в переменную с помощью Powershell

У меня есть несколько сетевых адаптеров на моем ПК.

Я хочу просто получить IP-адрес v4 (без заголовков или дополнений) адаптера с определенным именем и сохранить его в переменной для дальнейшего использования.

Я могу вернуть IP-адрес с заголовками, но не то, что хочу.

Пожалуйста, помогите - спасибо.

Вот что я пробовал:

$ipa = Get-NetIPAddress |
    Where-Object { $_.IfIndex -eq 19 -and $_.InterfaceAlias -eq "LAN2" -and $_.AddressFamily -eq "IPv4" } |
    Select-Object { $_.IPAddress }

Изменить:

$ipa = Get-NetIPAddress |  where {$_.InterfaceAlias -eq "LAN2" -and    
$_.AddressFamily -eq "IPv4"} | select -expandproperty ipaddress

Приведенный выше код возвращает оба адреса моих проводных адаптеров, но он возвращает, по крайней мере, только IP-адрес и ничего больше (спасибо Энтони)

Есть ТОЛЬКО один под названием "LAN2" - мне нужен только он - так что все еще застрял

Обновление: второе решение Остина Френча отлично работает — позже протестирую Owls — спасибо всем — отличное полезное сообщество


person user3511553    schedule 12.07.2016    source источник
comment
Привет, пожалуйста, используйте кнопку редактирования, чтобы добавить свой код к вашему вопросу, чтобы мы могли вам помочь :).   -  person sodawillow    schedule 12.07.2016
comment
Что сказал @sodawillow. Предоставьте минимальный воспроизводимый пример, а также укажите версию вашей PowerShell и ОС, поскольку PowerShell сетевые командлеты сильно изменились в более поздних версиях.   -  person briantist    schedule 12.07.2016
comment
попробуйте изменить последнюю часть на select -expandproperty ipaddress   -  person Anthony Stringer    schedule 12.07.2016
comment
извините, я напутал - я не могу понять инструкции по добавлению кода, они очень запутаны - я сделал отступ в 4 пробела, как указано - извините   -  person user3511553    schedule 12.07.2016
comment
спасибо, Энтони, ваше изменение дает только IP-адрес, НО по-прежнему возвращается 2 IP-адреса адаптера.   -  person user3511553    schedule 12.07.2016
comment
Пожалуйста, отредактируйте еще раз и включите неверный результат, который вы получили :) также, ваши проблемы с форматированием были вызваны только отсутствием разрывов строк   -  person sodawillow    schedule 12.07.2016


Ответы (3)


простой один лайнер

(Get-NetIPConfiguration).ipv4address | where {$_.InterfaceAlias -eq "Lan2"} | foreach { write-host $_.ipaddress}

получить из включенной сети

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE  | select Ipaddress

только с определенного адаптера и ipv4

Get-WMIObject win32_NetworkAdapterConfiguration | 
  Where-Object { $_.IPEnabled -eq $true } | 
  Foreach-Object { $_.IPAddress } | 
  Foreach-Object { [IPAddress]$_ } | 
  Where-Object { $_.AddressFamily -eq 'LAN2'  } | 
  Foreach-Object { $_.IPAddressToString }
person DisplayName    schedule 13.07.2016
comment
спасибо Сова - ваш первый отлично работает, возвращает именно то, что я хочу, 2-й возвращает все включенные адаптеры (и адреса IPv6 не нужны) ваш 3-й ничего не возвращает (вы перепутали имя адаптера с (Семейство адресов) - но спасибо за первый - person user3511553; 17.07.2016
comment
я выбрал первое решение Owls как наиболее эффективное и использующее мало кода :) - person user3511553; 17.07.2016

Без доступа к get-netipaddress, вот очень грязный и длинный лайнер. Измените «Подключение по локальной сети» на имя вашей сети.

((([System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | ? {$_.Name -eq  "Local Area Connection"}).GetIPProperties() | Select-Object -ExpandProperty 'UniCastAddresses' | ? {$_.IPv4Mask -ne
"0.0.0.0"}) | Select Address).Address.IPAddressToString

Я подозреваю, что с Get-netIpAddress это тоже сработает:

$ipa = (Get-NetIPAddress |
    Where-Object { $_.IfIndex -eq 19 -and $_.InterfaceAlias -eq "LAN2" -and $_.AddressFamily -eq "IPv4" } | `
    Select-Object { $_.IPAddress }).IPAddress
person Austin T French    schedule 12.07.2016
comment
Привет, Остин, твой первый ответ вылетает из-за этой ошибки ....................... Вы не можете вызвать метод на нулевое выражение. В \\\POWERSHELL-SCRIPTS\put_ip_into_variable.ps1:34 char:1 + $ipa = ((([System.Net.NetworkInformation.NetworkInterface]::GetAllNet ... + ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull - person user3511553; 13.07.2016
comment
НО ВАШЕ ВТОРОЕ РЕШЕНИЕ РАБОТАЕТ! БЛАГОДАРНОСТЬ - person user3511553; 13.07.2016
comment
Отличные новости, и не забудьте принять ответ (галочку), когда найдете то, что вам подходит. - person Austin T French; 13.07.2016

Вы можете выполнить то, что ищете, сначала получив список всех сетевых адаптеров на машине, используя get-wmiobject, выбрав нужное имя, затем передав его в get-netipaddress, а затем выбрав свойство IPAddress, как показано ниже.

(Get-WmiObject win32_networkadapter | Where-Object {$_.name -eq "YOUR_NAME"} | Get-NetIPAddress).IPAddress
person Mike Garuccio    schedule 12.07.2016
comment
Привет, Майк, спасибо, но ваше решение возвращает пустое значение - person user3511553; 13.07.2016
comment
Я только что проверил еще раз на одной из своих систем и получил правильный результат. Когда вы просто запускаете get-wmiobject win32_networkadapter, вы видите адаптер, который ищете? - person Mike Garuccio; 13.07.2016
comment
Ааа, я думаю, вы, возможно, пытаетесь использовать поле описания адаптера (наведите указатель мыши) - когда я вставил это, он работает - не с именем адаптера - вы более или менее получили, просто не нужно 1pv6 - ура :) немного сбивая с толку, что Microsoft назвала это имя в powershell - похоже, они ОЗНАЧАЮТ описание, так как это работает для меня - person user3511553; 14.07.2016