PowerShell 批量添加用户到组

  前言

  最近,有一大波用户要加组

  正文

  1.还是先上截图压压惊,如下图:

image

  2.添加组成功的截图,我这是测试只加了一个人,如下图:

image

  3.这个是完整的PowerShell 命令,大家自己品,如下图:

<#
.SYNOPSIS
PowerShell 7专用 - 批量向SharePoint Online用户组添加用户
.DESCRIPTION
支持单个组/多个组批量加用户,校验用户/组有效性,适配MFA登录,兼容邮箱/用户ID两种格式
#>

# -------------------------- 可配置变量(按需修改) --------------------------
$siteUrl = "https://linyus.sharepoint.com/sites/Develop"  # SPO站点地址

# 场景1:单个组批量加用户(启用此场景则注释场景2)
$targetGroupName = "Develop Members"                                   # 目标用户组名称
$usersToAdd = @(
    "linyu@linyus.onmicrosoft.com"                                       # 用户邮箱1
)

# 场景2:多个组批量加用户(启用此场景则注释场景1)
<#
$groupUserMapping = @(
    @{
        GroupName = "站点成员"
        Users     = @("user1@contoso.com", "user2@contoso.com")
    },
    @{
        GroupName = "文档编辑组"
        Users     = @("user3@contoso.com", "user4@contoso.com")
    }
)
#>

# -------------------------- 核心函数:添加用户到指定组 --------------------------
function Add-PnPUserToGroupBatch {
    param(
        [Parameter(Mandatory)]
        [string]$SiteUrl,
        [Parameter(Mandatory)]
        [string]$GroupName,
        [Parameter(Mandatory)]
        [array]$UserList
    )

    # 1. 校验目标用户组是否存在
    $targetGroup = Get-PnPGroup -Identity $GroupName -ErrorAction SilentlyContinue
    if (-not $targetGroup) {
        Write-Host "❌ 用户组 '$GroupName' 不存在,跳过添加" -ForegroundColor Red
        return
    }
    Write-Host "📌 开始处理用户组: $GroupName (组ID: $($targetGroup.Id))" -ForegroundColor Cyan

    # 2. 批量添加用户
    foreach ($user in $UserList) {
        try {
            # 校验用户是否有效(先获取用户信息)
            $spoUser = Get-PnPUser -Identity $user -ErrorAction Stop
            $userLogin = $spoUser.LoginName
            $userTitle = $spoUser.Title

            # 检查用户是否已在组中
            if (Get-PnPGroupMember -Group $GroupName -User $userLogin) {
                Write-Host "ℹ️ 用户 '$userTitle ($user)' 已在组 '$GroupName' 中,跳过" -ForegroundColor Yellow
                continue
            }

            # 添加用户到组
            Add-PnPGroupMember -LoginName $user -Group $targetGroup -ErrorAction Stop
            Write-Host "✅ 成功添加用户: $userTitle ($user) 到组 '$GroupName'" -ForegroundColor Green
        }
        catch {
            Write-Host "❌ 添加用户 '$user' 失败: $($_.Exception.Message)" -ForegroundColor Red
            continue
        }
    }
}

# -------------------------- 执行入口 --------------------------
# 1. 检查并安装PnP.PowerShell
if (-not (Get-Module -ListAvailable -Name PnP.PowerShell)) {
    Write-Host "🔧 正在安装PnP.PowerShell模块..." -ForegroundColor Cyan
    Set-PSRepository -Name PSGallery -InstallationPolicy Trusted -ErrorAction SilentlyContinue
    Install-Module -Name PnP.PowerShell -Force -AllowClobber -Scope CurrentUser -ErrorAction Stop
}
Import-Module PnP.PowerShell -DisableNameChecking -Force -ErrorAction Stop
Write-Host "✅ PnP.PowerShell模块加载成功`n" -ForegroundColor Green

# 2. 连接SPO站点
try {
    Write-Host "🔗 正在连接站点: $siteUrl" -ForegroundColor Cyan
    Connect-PnPOnline -Url $siteUrl -UseWebLogin -ErrorAction Stop
    Write-Host "✅ 站点连接成功`n" -ForegroundColor Green

    # 3. 执行批量添加逻辑
    Write-Host "🚀 开始批量添加用户到用户组..." -ForegroundColor Green

    # 场景1:单个组批量加用户
    if ($targetGroupName -and $usersToAdd) {
        Add-PnPUserToGroupBatch -SiteUrl $siteUrl -GroupName $targetGroupName -UserList $usersToAdd
    }

    # 场景2:多个组批量加用户(取消注释上方的$groupUserMapping即可启用)
    <#
    if ($groupUserMapping) {
        foreach ($mapping in $groupUserMapping) {
            $groupName = $mapping.GroupName
            $users = $mapping.Users
            Add-PnPUserToGroupBatch -SiteUrl $siteUrl -GroupName $groupName -UserList $users
            Write-Host "`n" -ForegroundColor White
        }
    }
    #>

    Write-Host "`n🎉 批量添加用户完成!" -ForegroundColor Green
}
catch {
    Write-Host "`n❌ 执行出错: $($_.Exception.Message)" -ForegroundColor Red
    exit 1
}
finally {
    # 断开连接
    if (Get-PnPConnection) {
        Disconnect-PnPOnline -ErrorAction SilentlyContinue
        Write-Host "`n🔌 已断开SPO站点连接" -ForegroundColor Cyan
    }
}

  结束语

  PowerShell 命令,真的是谁用谁知道呀

posted @ 2026-03-02 01:03  霖雨  阅读(41)  评论(0)    收藏  举报