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

PowerShell调用Graph API导出M365消息时Services字段格式优化咨询

解决Microsoft 365服务公告消息导出CSV时Services字段格式问题

问题背景

通过Graph API获取Microsoft 365管理中心的服务公告消息时,services字段为字符串数组类型。直接导出CSV时,该列会显示System.Object[]而非实际的服务名称。现有临时解法通过循环添加新属性实现转换,但需要更简洁高效的实现方式。

当前基础脚本:

$headers = Get-Token
$messageuri = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages?`$count=true&`$filter=lastModifiedDateTime ge 2023-05-10T23:29:23Z"
$messages = (Invoke-RestMethod -Uri $messageuri -headers $headers -Method Get).value
$messages | Select-Object id,services,lastModifiedDateTime,category,title 

优雅解法

解法1:使用Select-Object计算属性(推荐)

直接在Select-Object中通过计算属性将services数组转换为逗号分隔的字符串,一步完成字段处理与导出:

$headers = Get-Token
$messageuri = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages?`$count=true&`$filter=lastModifiedDateTime ge 2023-05-10T23:29:23Z"
$messages = (Invoke-RestMethod -Uri $messageuri -headers $headers -Method Get).value

$messages | Select-Object id,
    @{Name='services'; Expression={$_.services -join ','}},
    lastModifiedDateTime,
    category,
    title | Export-Csv -Path messages2.csv -NoTypeInformation

解法2:通过ForEach-Object覆盖原属性

若需保留原有对象结构,可通过ForEach-Object结合Add-Member强制替换services属性为字符串,流式处理避免内存占用:

$headers = Get-Token
$messageuri = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages?`$count=true&`$filter=lastModifiedDateTime ge 2023-05-10T23:29:23Z"
$messages = (Invoke-RestMethod -Uri $messageuri -headers $headers -Method Get).value

$messages | ForEach-Object {
    $_ | Add-Member -Name 'services' -MemberType NoteProperty -Value ($_.services -join ',') -Force
    $_
} | Export-Csv -Path messages2.csv -NoTypeInformation

原理说明

CSV格式仅支持单一值字段,PowerShell导出CSV时会将数组类型属性默认输出其类型名称System.Object[]。通过-join ','将数组元素拼接为单个字符串,即可让CSV显示实际的服务名称列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:08:17