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

如何从Aruba交换机配置备份中提取Tagged VLAN端口?

提取Aruba交换机配置中VLAN的Tagged端口

步骤1:转换内容格式

Select-String返回的是MatchInfo类型对象,先把它转成纯文本方便后续处理:

$contentText = $content | Out-String

步骤2:正则提取端口字符串

用正则匹配tagged开头的行,提取后面的端口部分:

if ($contentText -match 'tagged\s+(?<ports>.+)') {
    $taggedPortsStr = $matches['ports']
    # 此时$taggedPortsStr的值为 "5,8,47-52"
}

正则说明:

  • tagged\s+:匹配tagged及后续任意数量的空格
  • (?<ports>.+):捕获组,提取该行剩余所有内容并命名为ports

步骤3:(可选)展开端口范围为单个端口

如果后续需要单个端口的列表,可把47-52这类范围展开:

$taggedPorts = $taggedPortsStr -split ',' | ForEach-Object {
    if ($_ -match '(\d+)-(\d+)') {
        [int]$start = $matches[1]
        [int]$end = $matches[2]
        $start..$end
    }
    else {
        [int]$_
    }
}
# 此时$taggedPorts会是整数数组:5,8,47,48,49,50,51,52

完整示例代码

# 假设$content是之前获取的MatchInfo对象
$contentText = $content | Out-String

if ($contentText -match 'tagged\s+(?<ports>.+)') {
    $taggedPortsStr = $matches['ports']
    Write-Host "提取到的端口字符串:$taggedPortsStr"

    # 可选:展开端口范围
    $taggedPorts = $taggedPortsStr -split ',' | ForEach-Object {
        if ($_ -match '(\d+)-(\d+)') {
            [int]$start = $matches[1]
            [int]$end = $matches[2]
            $start..$end
        }
        else {
            [int]$_
        }
    }
    Write-Host "展开后的单个端口:$($taggedPorts -join ', ')"
}
else {
    Write-Host "未找到tagged配置行"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:40:22