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

PowerShell解析Yammer报表@{}格式stats字段提取members值

问题根因

你看到的@{members=xxx; aad_guests=xxx; ...}格式不是结构化的哈希表、数组、JSON类型,是PowerShell执行Export-Csv时,对复杂嵌套属性调用.ToString()方法生成的纯文本字符串。
你的导出脚本里,stats字段本是Yammer API返回的JSON转换后的嵌套对象,Export-Csv不支持直接把嵌套对象写入CSV单元格,会自动将对象转成上述格式的字符串存储。你读回CSV时拿到的stats字段只是普通文本,不是可直接取属性的对象,这就是你之前用-ExpandProperty、where等方法始终拿不到members值的原因。

解决方案

方案1:修改原始导出脚本(推荐,从根源避免格式问题)

导出CSV前提前把stats里需要的字段拆成顶层独立列,就不会出现对象自动转字符串的问题,只需修改脚本最后导出数据的部分:

$users = Get-YamUsers
$users | Select-Object id, name, full_name, web_url, privacy, 
  external, state, creator_id, created_at, last_message_at,
  @{Name='members';Expression={$_.stats.members}},
  @{Name='aad_guests';Expression={$_.stats.aad_guests}},
  @{Name='updates';Expression={$_.stats.updates}},
  @{Name='last_message_id';Expression={$_.stats.last_message_id}},
  @{Name='stats_last_message_at';Expression={$_.stats.last_message_at}} | 
   Export-Csv f:\tmp\YammerGroupInfo.csv -NoTypeInformation 

修改后导出的CSV会直接包含独立的members列,读取时直接访问$YMy.members就能拿到成员计数值,无需额外解析。

方案2:解析已生成的现有CSV文件

如果已经生成了CSV文件,不想重新调用接口拉取数据,可以用正则表达式直接从stats字段的字符串中提取members值,修改读取脚本如下:

$YamMy = Import-Csv .\YammerGroupInfo.csv | Sort-Object "full_name" -Descending 

Foreach ($YMy in $YamMy){
    $groupName = $YMy.full_name 
    $privacy = $YMy.privacy
    # 正则匹配members=后的数字,直到遇到分号或字段结尾
    if ($YMy.stats -match 'members=(\d+)') {
        $memberCount = $matches[1]
    }
    # 后续逻辑直接使用$memberCount即可
}

该正则匹配逻辑不受其他字段空值、格式变化影响,可稳定提取成员数值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:36:22