You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell5.1 Select正则替换IP字段及拆分IPv4/IPv6方法

解决方案

修复原代码实现特殊字符移除

原代码无法正常生效的核心原因:

  • 正则匹配规则仅覆盖{、}两个目标字符,遗漏了待移除的方括号;方括号属于正则语法中的特殊元字符,匹配字面量时需要做转义处理
  • Get-WmiObject为已废弃的旧版WMI访问命令,在PowerShell 7及以上版本已被移除,替换为Get-CimInstance可兼容PowerShell 5.1到最新版本的运行环境

修复后可直接运行的代码如下:

Get-CimInstance Win32_NetworkAdapterConfiguration | 
    Where-Object { $_.IPAddress -ne $null } | 
    Select-Object @{
        Label = "IP address"
        Expression = { $_.IPAddress -replace '[\[\]{}]', '' }
    }, MACAddress

如果需要保留原Get-WmiObject的写法,仅替换正则匹配规则即可:

get-wmiobject win32_networkadapterconfiguration | where {$_.IPAddress -ne $Null} | select @{label="IP address";Expression={$_.IPAddress -replace '[\[\]{}]',''}}, MACAddress

拆分IPv4、IPv6地址到独立列

Win32_NetworkAdapterConfiguration返回的IPAddress属性为字符串数组,可通过IP地址的地址族属性区分类型:IPv4对应地址族为InterNetwork,IPv6对应地址族为InterNetworkV6。
实现地址拆分同时移除目标特殊字符的代码如下:

Get-CimInstance Win32_NetworkAdapterConfiguration |
    Where-Object { $_.IPAddress -ne $null } |
    Select-Object @{
        Label = "IPv4Address"
        Expression = {
            $v4List = $_.IPAddress | Where-Object { 
                $ip = [IPAddress]$_
                $ip -is [IPAddress] -and $ip.AddressFamily -eq 'InterNetwork'
            }
            $v4List -replace '[\[\]{}]', '' -join ', '
        }
    }, @{
        Label = "IPv6Address"
        Expression = {
            $v6List = $_.IPAddress | Where-Object { 
                $ip = [IPAddress]$_
                $ip -is [IPAddress] -and $ip.AddressFamily -eq 'InterNetworkV6'
            }
            $v6List -replace '[\[\]{}]', '' -join ', '
        }
    }, MACAddress

代码中使用-join ', '将同一网卡下的多个同类型IP拼接为逗号分隔的字符串,避免数组默认输出自动带大括号的问题;如果需要保留数组类型,删除-join ', '段即可。

内容的提问来源于stack exchange,提问作者YorSubs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:24:14