如何在Teams批量添加用户脚本中整合移除非CSV用户的逻辑
整合Teams用户同步逻辑:新增+移除不在CSV中的用户
问题背景
现有PowerShell脚本可从CSV文件向Teams批量添加用户,但需要补充移除不在CSV文件中用户的功能,确保Teams成员与CSV内容完全同步。参考了AD组的移除逻辑,不确定如何整合到现有脚本中。
整合位置与逻辑说明
需要在每个团队的用户添加循环完成后(也就是foreach($user in $_.Group)代码块结束后),加入移除逻辑。具体步骤:
- 提取当前团队在CSV中所有用户的
UserPrincipleName,作为有效用户列表 - 获取当前Teams团队的所有成员(通过
Get-TeamUser) - 筛选出不在有效用户列表中的成员
- 批量移除这些无效用户
修改后的完整脚本
# Read team users from CSV file $TeamUsers = Import-CSV "File_Path" $i = 0 # 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) { return } # If the Group could be found, create a hashtable for future splatting $params = @{ GroupId = $groupId } # 批量添加CSV中的用户到对应团队 foreach($user in $_.Group) { try { # create a hashtable for splatting progress $progress = @{ PercentComplete = $i++ / $TeamUsers.Count * 100 Activity = 'Syncing Users to MS Teams!!' Status = 'Adding User: "{0}" to Team: "{1}"' -f $user.UserPrincipleName, $_.Name } Write-Progress @progress # add this user with this role to the hashtable $params['User'] = $user.UserPrincipleName $params['Role'] = $user.Role Add-TeamUser @params } catch { ('Error occurred when adding {0} to {1}' -f $user.UserPrincipleName, $_.Name), $_.ToString() | Write-Warning } } # -------------------------- 新增:移除不在CSV中的用户逻辑 -------------------------- try { # 提取当前团队CSV中的有效用户UPN列表 $validUserUPNs = $_.Group | Select-Object -ExpandProperty UserPrincipleName # 获取当前团队的所有成员 $currentTeamMembers = Get-TeamUser -GroupId $groupId # 筛选出不在CSV中的用户 $usersToRemove = $currentTeamMembers | Where-Object { $validUserUPNs -notcontains $_.User } if($usersToRemove) { Write-Progress -Activity 'Syncing Users to MS Teams!!' -Status "Removing $($usersToRemove.Count) invalid users from Team: ""$($_.Name)""" foreach($userToRemove in $usersToRemove) { try { # 建议先添加-WhatIf参数测试逻辑,确认无误后再移除该参数 Remove-TeamUser -GroupId $groupId -User $userToRemove.User Write-Verbose "Successfully removed user $($userToRemove.User) from Team $($_.Name)" } catch { ('Error occurred when removing {0} from {1}' -f $userToRemove.User, $_.Name), $_.ToString() | Write-Warning } } } else { Write-Verbose "No invalid users found in Team: ""$($_.Name)""" } } catch { ('Error occurred during user removal process for Team: "{0}"' -f $_.Name), $_.ToString() | Write-Warning } # -------------------------- 移除逻辑结束 -------------------------- }
注意事项
- 首次测试时,建议在
Remove-TeamUser命令后添加-WhatIf参数,验证待移除用户是否正确,确认无误后再执行实际删除 - 确保脚本执行账号拥有
Remove-TeamUser的权限 - 需保证CSV文件中
UserPrincipleName的准确性,避免误删有效用户
内容的提问来源于stack exchange,提问作者Tyler Laidler
相关产品推荐
相关产品推荐

