Powershell получает ipv4-адрес в переменную
Есть ли простой способ в PowerShell 3.0 Windows 7 получить адрес ipv4 локального компьютера в переменную?
Ответы
Ответ 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.
- Получить вывод конфигурации IP в
LineNumber | Line
Формат LineNumber | Line
$ip_config = $(ipconfig/all | % {$_ -split "
r n"} | Select-String -Pattern ".*" | select LineNumber, Line)
- Получить список интерфейсов (+ последняя строка вывода
ipconfig
) в LineNumber | Line
Формат LineNumber | Line
$interfaces = $($ip_config | where {$_.Line -notmatch '^\s*$'} | where {$_.Line -notmatch '^\s'}) + $($ip_config | Select -last 1)
- Фильтруйте список интерфейсов для определенного интерфейса, который вы хотите
$LAN = $($interfaces | where {$_.Line -match 'Wireless Network Connection:$'})
- Получить начальную и конечную номера строк выбранного интерфейса из вывода
$i = $interfaces.IndexOf($LAN)
$start = $LAN.LineNumber
$end = $interfaces[$i+1].LineNumber
- Выберите строки с
start..end
$LAN = $ip_config | where {$_.LineNumber -in ($start..$end)}
- Поле "Получить адрес 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