如何用PowerShell提取动态键JSON对象中的mailAddress值?
提取动态键JSON中的所有mailAddress到数组
没问题,这种顶层键动态变化的场景在PowerShell里很好处理,我给你两种实用的解决方案:
方法1:利用PSObject.Properties(兼容所有PowerShell版本)
首先把JSON字符串转换成PowerShell对象,然后通过PSObject.Properties获取所有顶层动态键对应的属性,再提取每个属性值里的mailAddress:
# 假设你的JSON内容已经存储在变量$jsonString中 $jsonObject = $jsonString | ConvertFrom-Json # 提取所有mailAddress到数组 $mailAddresses = $jsonObject.PSObject.Properties.Value | Select-Object -ExpandProperty mailAddress
说明:
PSObject.Properties会返回顶层所有动态的aad.*键对应的属性集合.Value获取每个属性对应的用户对象Select-Object -ExpandProperty mailAddress会把每个用户对象的mailAddress值提取出来,自动组成数组
方法2:使用哈希表(PowerShell 7+ 推荐)
如果你用的是PowerShell 7或更高版本,可以用ConvertFrom-Json -AsHashtable参数直接把JSON转换成哈希表,处理起来更简洁:
# PowerShell 7+ 适用 $jsonHashtable = $jsonString | ConvertFrom-Json -AsHashtable # 直接提取所有值中的mailAddress $mailAddresses = $jsonHashtable.Values.mailAddress
说明:
- 哈希表的
.Values属性直接返回所有用户对象 - 直接访问
.mailAddress时,PowerShell会自动遍历所有对象并收集属性值为数组
验证结果
执行完上述代码后,你可以输出$mailAddresses查看结果:
$mailAddresses
输出会是:
Tom.Test@email.com Dummy.May@mail.com
从文件读取JSON的情况
如果你的JSON内容存放在文件里,可以这样处理:
# 读取JSON文件并转换为对象 $jsonObject = Get-Content -Path "C:\path\to\your\data.json" -Raw | ConvertFrom-Json # 提取mailAddress数组 $mailAddresses = $jsonObject.PSObject.Properties.Value.mailAddress
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

