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

PowerShell生成谷歌日历委托报表不使用+=包含无委托用户的方法

实现方案

核心思路是直接捕获整个外层循环的输出到结果变量,PowerShell 会自动把所有输出的 PSCustomObject 整理为数组,完全不需要+=运算符,同时性能比+=拼接数组更优(+=每次都会重新生成新数组,用户量大时性能损耗明显)。

调整后的完整代码如下:

<#All Google Calendar delegate report#>
# filename function
Import-Module C:\tasks\Modules\MRNAP\MRNAP.psm1

$AllGoogleUsers = gam print users fields suspended  | ConvertFrom-Csv | Where-Object { $_.suspended -eq $False } | Select-Object -ExpandProperty PrimaryEmail

# 直接将ForEach循环的所有输出赋值给结果变量
$CalendarDelegateList = ForEach ($UserEmail in $AllGoogleUsers) {
    $DelegateCal = gam calendar $UserEmail print acls | convertfrom-csv | Where-Object { $_.'scope.type' -eq 'user' -and $_.'Scope.value' -ne $UserEmail } -ErrorAction SilentlyContinue
    
    If ($null -ne $DelegateCal) {
        # 有委托的情况,直接输出每个委托对象,会自动被外层变量捕获
        foreach ($line in $DelegateCal) {
            [PSCustomObject]@{
                Owner    = $UserEmail
                Type     = 'Calendar'
                Delegate = $line.'scope.value'
                Role     = $line.role
            }
        }
    }
    Else {
        # 无委托的情况,输出标记为None的对象,同样会被捕获
        [PSCustomObject]@{
            Owner     = $UserEmail
            Type      = 'Calendar'
            Delegate = 'None'
            Role     = 'None'
        }
    }
}

$CalendarDelegateList = $CalendarDelegateList | Sort-Object -Property Owner

$filename = MRNAP -ReportName WhoIsCalendarDelegated -Move
# 修复原代码笔误:$CalendarDelegateLis 缺少末尾的t
$CalendarDelegateList | Export-Csv $filename -NoTypeInformation

说明

  • 循环内不需要做任何赋值操作,只要把要加入结果集的对象直接输出即可,PowerShell 会自动把所有输出的对象收集到变量中
  • 如果用户有多个日历委托,会自动生成多条对应记录,没有委托的用户也会生成一条标记为None的记录,完全符合报表统计需求
  • 这种方式因为提前覆盖了无委托的输出场景,结果变量不会出现$null的情况,后续排序、导出操作都可以正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:30:00