Powershell将ipv4地址转换为变量

dev*_*747 28 windows powershell-3.0

在PowerShell 3.0 Windows 7中是否有一种简单的方法可以将本地计算机的ipv4地址转换为变量?

Luc*_*cas 32

这是另一个解决方案:

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

  • 效果不错,但速度很慢,需要3981ms秒才能在笔记本电脑上运行(i5-7th-gen / 12GBRM) (2认同)
  • 作为必需的OP,这在Windows 7上不起作用。直到Server 2012 / Windows 8才引入cmdlet。 (2认同)
  • 我在 Windows 10 PS 5 上没有得到任何输出,但像这样分割它可以工作: `$i=Get-NetIPConfiguration|Where-Object{$_.ipv4defaultgateway -ne $null};$i.IPv4Address.ipaddress` (2认同)

Jan*_*han 27

这个怎么样?(不是我的真实IP地址!)

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

PS C:\> $ipV4

IPV4Address                                                  
-----------
192.0.2.0
Run Code Online (Sandbox Code Playgroud)

请注意,使用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
Run Code Online (Sandbox Code Playgroud)

必须扩展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
Run Code Online (Sandbox Code Playgroud)

  • 有专门为示例/文档保留的IP地址(192.0.2.0/24,198.51.100.0/24,203.0.113.0/24)https://tools.ietf.org/html/rfc5737 (3认同)
  • 您可以避免通过使用$ env:COMPUTERNAME环境变量(即Test-Connection $ env:COMPUTERNAME -Count 1 |)来使用“(hostname)”调用外部实用程序。选择IPV4Address。 (3认同)
  • 这项工作很好,谢谢。总结所有建议,这是最优雅的解决方案:`$ ipv4 =(Test-Connection -ComputerName $ env:ComputerName -Count 1).IPV4Address.IPAddressToString`我在连接到有线网络的系统上对此进行了测试,并且它显示了IPv4。当未连接到任何网络时,它将显示主目录(127.0.0.1);当连接到无线时,它将显示IPv4。 (3认同)
  • `$ ip =(Test-Connection -ComputerName(hostname)-Count 1).IPV4Address.IPAddressToString` (2认同)

dev*_*747 11

如果我使用机器名称,这是有效的.但有点像黑客(因为我只是选择了我获得的ipv4地址的第一个值.)

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

请注意,您必须在上面的表达式中替换值PasteMachineNameHere

这也有效

$localIpAddress=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
Run Code Online (Sandbox Code Playgroud)


小智 8

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


Del*_*der 8

以下是使用windows powershell和/或powershell core 的三种方法,从最快到最慢列出。您可以将其分配给您选择的变量。



方法一:(这个方法是最快的,在windows powershell和powershell core下都可以用)
$ipAddress = (Get-NetIPAddress | Where-Object {$_.AddressState -eq "Preferred" -and $_.ValidLifetime -lt "24:00:00"}).IPAddress


方法二:(这个方法和方法一一样快,但是对powershell core不适用)
$ipAddress = (Test-Connection -ComputerName (hostname) -Count 1 | Select -ExpandProperty IPv4Address).IPAddressToString


方法3:(虽然最慢,但在windows powershell和powershell core上都可以使用)
$ipAddress = (Get-NetIPConfiguration | Where-Object {$_.IPv4DefaultGateway -ne $null -and $_.NetAdapter.status -ne "Disconnected"}).IPv4Address.IPAddress


rob*_*rob 6

这是我最终使用的

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

它被打破了

  • execute ipconfig命令 - 获取所有网络接口信息
  • 使用powershell's过滤器使用正则表达式
  • 正则表达式查找具有"IPv4"的行和一组4个块,每个块具有由句点分隔的1-3个数字,即v4 IP地址
  • 通过将输出管道为null来忽略输出
  • 最后得到正则表达式括号中定义的第一个匹配组.
  • 捕获$ ipaddress中的输出以供以后使用.


ahm*_*ish 5

这一行为您提供了 IP 地址:

(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
Run Code Online (Sandbox Code Playgroud)

将其包含在变量中吗?

$IPV4=(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
Run Code Online (Sandbox Code Playgroud)