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

如何从PowerShell的匿名PSCustomObject属性中提取IPv4地址

提取PSCustomObject中的IPv4地址字符串

你可以通过以下两种常用方法,从IPAddresses属性(实际为字符串数组类型)中提取IPv4地址:

方法一:正则表达式匹配

利用正则匹配标准IPv4的点分十进制格式,快速过滤目标地址:

# 获取包含IPAddresses的对象
$vmNetworkInfo = Get-VM -Name Linux | Select-Object -ExpandProperty networkadapters | Select-Object IPAddresses

# 过滤出IPv4地址
$ipv4List = $vmNetworkInfo.IPAddresses | Where-Object { $_ -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$' }

# 查看结果
$ipv4List

正则表达式^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$会匹配符合xxx.xxx.xxx.xxx格式的字符串,适合快速筛选场景。

方法二:.NET类严谨判断

借助System.Net.IPAddress类解析地址,通过地址族判断是否为IPv4,能排除格式无效的伪IP:

$vmNetworkInfo = Get-VM -Name Linux | Select-Object -ExpandProperty networkadapters | Select-Object IPAddresses

$ipv4List = $vmNetworkInfo.IPAddresses | ForEach-Object {
    try {
        $parsedIp = [System.Net.IPAddress]::Parse($_)
        # 判断是否为IPv4地址族
        if ($parsedIp.AddressFamily -eq 'InterNetwork') { $_ }
    }
    catch {
        # 跳过解析失败的无效地址
    }
}

$ipv4List

这种方法更可靠,比如能排除256.1.1.1这类格式错误的地址。

补充说明

如果虚拟机有多块网卡,上述代码会提取所有网卡的IPv4地址;若只需单块网卡的地址,可在获取网卡时添加筛选,例如:

# 只取第一块网卡的信息
$vmNetworkInfo = Get-VM -Name Linux | Select-Object -ExpandProperty networkadapters -First 1 | Select-Object IPAddresses

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:05