PowerShell获取网卡描述与IPv4地址,排除IPv6的方法求助
解决方法
基础实现(保留网卡与对应IP数组的关联)
通过计算属性过滤IPAddress数组,只保留IPv4地址,同时维持与Description的关联:
Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true } | Select-Object Description, @{ Name = 'IPv4Address' Expression = { $_.IPAddress | Where-Object { $_ -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$' } } }
关键说明
Where-Object { $_.IPEnabled -eq $true }:过滤掉未启用IP配置的网卡,避免无效空条目。- 计算属性
@{Name='IPv4Address';Expression={...}}:对每个网卡的IPAddress数组做筛选,用正则表达式^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$匹配标准IPv4格式,仅保留符合条件的地址。 - 你之前用
Select -Expand IPAddress会破坏网卡与IP的对应关系(展开后每个IP单独成条目,无法关联原Description),计算属性是维持关联的正确方式。
进阶:每个IPv4地址单独一行显示
如果网卡绑定多个IPv4地址,想要每个IP对应一条独立记录,用循环展开:
Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object IPEnabled | ForEach-Object { foreach ($ip in $_.IPAddress | Where-Object { $_ -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$' }) { [PSCustomObject]@{ Description = $_.Description IPv4Address = $ip } } }
推荐替代(PowerShell 5.1+)
Get-WmiObject已逐步被Get-CimInstance替代,后者性能更优,用法一致:
Get-CimInstance Win32_NetworkAdapterConfiguration | Where-Object IPEnabled | Select-Object Description, @{ Name = 'IPv4Address' Expression = { $_.IPAddress | Where-Object { $_ -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$' } } }
内容的提问来源于stack exchange,提问作者FrostyH23
相关产品推荐
相关产品推荐

