Подтвердить что ты не робот

Powershell получает ipv4-адрес в переменную

Есть ли простой способ в PowerShell 3.0 Windows 7 получить адрес ipv4 локального компьютера в переменную?

4b9b3361

Ответ 1

Как насчет этого? (не мой настоящий IP-адрес!)

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1  | Select IPV4Address

PS C:\> $ipV4

IPV4Address                                                  
-----------
192.0.2.0

Обратите внимание, что использование localhost просто вернет и IP-адрес 127.0.0.1

PS C:\> $ipV4 = Test-Connection -ComputerName localhost -Count 1  | Select IPV4Address

PS C:\> $ipV4

IPV4Address                                                             
-----------                                                  
127.0.0.1

Объект IP-адреса должен быть расширен, чтобы получить адресную строку

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1  | Select -ExpandProperty IPV4Address 

PS C:\> $ipV4

Address            : 556228818
AddressFamily      : InterNetwork
ScopeId            : 
IsIPv6Multicast    : False
IsIPv6LinkLocal    : False
IsIPv6SiteLocal    : False
IsIPv6Teredo       : False
IsIPv4MappedToIPv6 : False
IPAddressToString  : 192.0.2.0


PS C:\> $ipV4.IPAddressToString
192.0.2.0

Ответ 2

Вот еще одно решение:

$env:HostIP = (
    Get-NetIPConfiguration |
    Where-Object {
        $_.IPv4DefaultGateway -ne $null -and
        $_.NetAdapter.Status -ne "Disconnected"
    }
).IPv4Address.IPAddress

Ответ 3

Если я использую имя машины, это работает. Но вроде как взломать (потому что я просто выбираю первое значение адреса ipv4, которое я получаю.)

$ipaddress=([System.Net.DNS]::GetHostAddresses('PasteMachineNameHere')|Where-Object {$_.AddressFamily -eq "InterNetwork"}   |  select-object IPAddressToString)[0].IPAddressToString

Обратите внимание, что вы должны заменить значение PasteMachineNameHere в приведенном выше выражении

Это тоже работает

$localIpAddress=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]

Ответ 4

Вот что я в итоге использовал

$ipaddress = $(ipconfig | where {$_ -match 'IPv4.+\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' } | out-null; $Matches[1])

который разбивается как

  • выполнить команду ipconfig - получить всю информацию о сетевом интерфейсе
  • используйте powershell, где фильтр с регулярным выражением
  • регулярное выражение находит строку с "IPv4" и набор из 4 блоков с 1-3 цифрами, разделенными периодами, то есть IP-адрес v4
  • игнорировать вывод, связывая его с нулевым
  • наконец, получим первую согласованную группу, определенную скобками в регулярном выражении.
  • поймать этот вывод в $ipaddress для последующего использования.

Ответ 5

Другой вариант, использующий переменную среды $env для захвата имени хоста:

Test-Connection -ComputerName $env:computername -count 1 | Select-Object IPV4Address

или если вы просто хотите, чтобы IP-адрес был возвращен без заголовка свойства

(Test-Connection -ComputerName $env:computername -count 1).IPV4Address.ipaddressTOstring

Ответ 6

(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DefaultIPGateway -ne $null}).IPAddress | select-object -first 1

Ответ 7

У меня недавно была такая же проблема. Поэтому я написал скрипт для анализа его из вывода ipconfig/all. Этот скрипт легко модифицируется для получения любых параметров интерфейсов, и он также работает в Windows 7.

  1. Получить вывод конфигурации IP в LineNumber | Line Формат LineNumber | Line

$ip_config = $(ipconfig/all | % {$_ -split " r n"} | Select-String -Pattern ".*" | select LineNumber, Line)

  1. Получить список интерфейсов (+ последняя строка вывода ipconfig) в LineNumber | Line Формат LineNumber | Line

$interfaces = $($ip_config | where {$_.Line -notmatch '^\s*$'} | where {$_.Line -notmatch '^\s'}) + $($ip_config | Select -last 1)

  1. Фильтруйте список интерфейсов для определенного интерфейса, который вы хотите

$LAN = $($interfaces | where {$_.Line -match 'Wireless Network Connection:$'})

  1. Получить начальную и конечную номера строк выбранного интерфейса из вывода

$i = $interfaces.IndexOf($LAN)
$start = $LAN.LineNumber
$end = $interfaces[$i+1].LineNumber

  1. Выберите строки с start..end

$LAN = $ip_config | where {$_.LineNumber -in ($start..$end)}

  1. Поле "Получить адрес IP (v4)" (возвращает ноль, если адрес IPv4 отсутствует)

$LAN_IP = @($LAN | where {$_ -match 'IPv4.+:\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'})
$LAN_IP = &{If ($LAN_IP.Count -gt 0) {$Matches[1]} Else {$null}}

Ответ 8

$a = ipconfig
$result = $a[8] -replace "IPv4 Address. . . . . . . . . . . :",""

Также проверьте, какой индекс ipconfig имеет адрес IPv4

Ответ 9

Этот лайнер дает вам IP-адрес:

(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString

Включить его в переменную?

$IPV4=(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString