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

在PowerShell 5.1中提取JSON内的AP名称及指定BSSID信息

PowerShell 5.1 JSON解析与指定数据提取解决方案

需求说明

  • 运行环境:PowerShell 5.1
  • 数据源:网络团队提供的JSON格式AP配置文件
  • 提取目标:
    • AP名称
    • 仅wifitrusted、wifiguest两个ESSID对应的macaddr值
  • 输出要求:将结果导出为CSV文件

示例JSON数据

{
  "aps": [
    {
      "ap_name": "AP-Floor1-01",
      "ssids": [
        {
          "essid": "wifitrusted",
          "macaddr": "aa:bb:cc:dd:ee:01"
        },
        {
          "essid": "wifiguest",
          "macaddr": "aa:bb:cc:dd:ee:02"
        },
        {
          "essid": "wifimanagement",
          "macaddr": "aa:bb:cc:dd:ee:03"
        }
      ]
    },
    {
      "ap_name": "AP-Floor1-02",
      "ssids": [
        {
          "essid": "wifitrusted",
          "macaddr": "aa:bb:cc:dd:ee:04"
        },
        {
          "essid": "wifimanagement",
          "macaddr": "aa:bb:cc:dd:ee:05"
        }
      ]
    }
  ]
}

现有代码片段

# 已实现的AP名称提取函数
function GetName {
    param(
        [Parameter(Mandatory=$true)]
        $JsonInput
    )
    return $JsonInput.aps.ap_name
}

# 未完成的ESSID对应MAC提取函数
function GetEssid {
    param(
        [Parameter(Mandatory=$true)]
        $JsonInput
    )
    # 待补充逻辑:提取指定ESSID的macaddr
}

# 现有执行流程
$jsonContent = Get-Content -Path "ap_data.json" -Raw | ConvertFrom-Json
$apNames = GetName -JsonInput $jsonContent
# 无法正确获取目标macaddr

期望CSV输出格式

APName,TrustedMAC,GuestMAC
AP-Floor1-01,aa:bb:cc:dd:ee:01,aa:bb:cc:dd:ee:02
AP-Floor1-02,aa:bb:cc:dd:ee:04,

完整解决方案

方案1:简化版脚本(无需单独函数)

# 替换为你的JSON文件路径
$jsonFilePath = "ap_data.json"
# 替换为你的CSV输出路径
$csvOutputPath = "ap_mac_export.csv"

# 加载并解析JSON
$apData = Get-Content -Path $jsonFilePath -Raw | ConvertFrom-Json

# 遍历每个AP节点,提取目标数据
$outputRecords = foreach ($ap in $apData.aps) {
    # 提取指定ESSID的MAC地址,不存在则返回空值
    $trustedMac = ($ap.ssids | Where-Object { $_.essid -eq "wifitrusted" }).macaddr
    $guestMac = ($ap.ssids | Where-Object { $_.essid -eq "wifiguest" }).macaddr

    # 构建结构化输出对象
    [PSCustomObject]@{
        APName      = $ap.ap_name
        TrustedMAC  = $trustedMac
        GuestMAC    = $guestMac
    }
}

# 导出为CSV(-NoTypeInformation避免添加PowerShell类型头)
$outputRecords | Export-Csv -Path $csvOutputPath -NoTypeInformation -Encoding UTF8

方案2:保留函数式实现(优化GetEssid)

function GetName {
    param(
        [Parameter(Mandatory=$true)]
        $JsonInput
    )
    return $JsonInput.aps.ap_name
}

function GetEssid {
    param(
        [Parameter(Mandatory=$true)]
        $ApObject,
        [Parameter(Mandatory=$true)]
        [string]$TargetEssid
    )
    # 筛选指定ESSID对应的MAC地址,不存在则返回空值
    return ($ApObject.ssids | Where-Object { $_.essid -eq $TargetEssid }).macaddr
}

# 执行流程
$jsonFilePath = "ap_data.json"
$csvOutputPath = "ap_mac_export.csv"

$apData = Get-Content -Path $jsonFilePath -Raw | ConvertFrom-Json

$outputRecords = foreach ($ap in $apData.aps) {
    [PSCustomObject]@{
        APName      = $ap.ap_name
        TrustedMAC  = GetEssid -ApObject $ap -TargetEssid "wifitrusted"
        GuestMAC    = GetEssid -ApObject $ap -TargetEssid "wifiguest"
    }
}

$outputRecords | Export-Csv -Path $csvOutputPath -NoTypeInformation -Encoding UTF8

关键逻辑说明

  1. JSON解析:ConvertFrom-Json将JSON字符串转为PowerShell对象,可直接通过点语法(如$apData.aps、$ap.ap_name)访问属性
  2. 数据筛选:用Where-Object过滤指定ESSID的节点,提取对应的macaddr值,若节点不存在则返回$null(CSV中显示为空)
  3. 结构化输出:通过[PSCustomObject]定义输出列名,确保CSV格式符合预期
  4. CSV导出:-NoTypeInformation参数避免在CSV头部添加PowerShell类型注释,-Encoding UTF8保证中文兼容(若有)

内容的提问来源于stack exchange,提问作者joe williams III

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:33:12