如何获取Teams变更报告及为用户导入脚本添加报告导出功能
问题解答
1. 如何获取Microsoft Teams的变更报告?
通过Microsoft 365管理中心
- 登录Microsoft 365管理中心,进入报表 > 审核日志
- 在筛选条件中选择活动源为Microsoft Teams,再按需设置时间范围、活动类型(如成员添加/移除、团队创建/修改等)
- 可直接查看结果,或点击导出将日志保存为CSV格式
通过PowerShell(Microsoft Graph模块)
先确保已安装并连接Microsoft Graph模块:# 安装模块(未安装时执行) Install-Module Microsoft.Graph -Force -AllowClobber # 连接Graph,需AuditLog.Read.All权限 Connect-MgGraph -Scopes AuditLog.Read.All再查询Teams相关审核日志:
# 获取最近7天的Teams变更日志并导出 Get-MgAuditLogDirectoryAudit -Filter "ResourceDisplayName eq 'Microsoft Teams'" -All | Select-Object ActivityDateTime, OperationName, UserPrincipalName, TargetResources | Export-Csv -Path "Teams_Change_Report.csv" -NoTypeInformation通过Teams管理中心
登录Teams管理中心,进入分析与报告 > 使用情况报告,选择对应报告类型(如团队活动报告、成员活动报告),筛选后导出即可。
2. 修改PowerShell脚本以导出用户添加报告
通过创建结果数组记录每个用户的添加状态,最终导出为CSV文件,修改后的脚本如下:
# Read team users from CSV file $TeamUsers = Import-CSV "Import_Path.csv" $i = 0 # 创建数组存储报告结果 $reportResults = @() # Group the objects by their TeamDesc property, so we only query each group once $TeamUsers | Group-Object TeamDesc | ForEach-Object { #Get the GroupId of this Group $groupId = (Get-Team -DisplayName $_.Name).GroupId #If the Group couldn't be found, just skip below logic if(-not $groupId) { # 记录团队不存在的用户情况 foreach($user in $_.Group){ $reportResults += [PSCustomObject]@{ TeamName = $_.Name UserPrincipalName = $user.UserPrincipalName Role = $user.Role Status = "失败" ErrorMessage = "未找到对应团队" } $i++ } return } #If the Group could be found, create a hashtable for future splatting $params = @{ GroupId = $groupId } #now we can enumerate each object in each group of objects foreach($user in $_.Group){ try { # create a hashtable for splatting progress $progress = @{ PercentComplete = $i++ / $TeamUsers.Count * 100 Activity = 'Adding Users to MS Teams!!' Status = 'Working on Team: "{0}" and User: "{1}"' -f $_.Name, $user.UserPrincipalName } Write-Progress @progress # add this user with this role to the hashtable $params['User'] = $user.UserPrincipalName $params['Role'] = $user.Role Add-TeamUser @params # 记录成功添加的用户信息 $reportResults += [PSCustomObject]@{ TeamName = $_.Name UserPrincipalName = $user.UserPrincipalName Role = $user.Role Status = "成功" ErrorMessage = $null } } catch { $errorMsg = $_.ToString() ('Error occurred for {0} - {1}' -f $_.Name, $user.UserPrincipalName), $errorMsg | Write-Warning # 记录失败的用户及错误信息 $reportResults += [PSCustomObject]@{ TeamName = $_.Name UserPrincipalName = $user.UserPrincipalName Role = $user.Role Status = "失败" ErrorMessage = $errorMsg } } } } # 导出报告到CSV文件 $reportResults | Export-Csv -Path "Teams_User_Add_Report.csv" -NoTypeInformation -Encoding UTF8 Write-Host "报告已导出到 Teams_User_Add_Report.csv"
修改说明:
- 新增
$reportResults数组,专门存储每个用户的添加结果 - 当团队不存在时,为该团队下所有用户记录失败状态及原因
- 在
try块中添加成功记录,catch块中添加失败记录及错误详情 - 脚本结束后将结果导出为UTF8编码的CSV文件,避免中文乱码问题
内容的提问来源于stack exchange,提问作者Tyler Laidler
相关产品推荐
相关产品推荐

