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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:40:23