惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Recent Announcements
Recent Announcements
V
Visual Studio Blog
博客园 - 叶小钗
H
Help Net Security
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
D
DataBreaches.Net
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence

博客园 - 霖雨

用PowerShell命令一次启动多个前后端应用 Visual Studio Code中配置Cline 解决MSSQLLocalDB连接失败的问题 使用App Registration 访问 SharePoint Online (二) 使用App Registration 访问 SharePoint Online (一) SharePoint Online 文档库的还原功能 SharePoint Online 快捷方式功能 SharePoint Online 文档库的收藏功能 使用豆包开发SharePoint Framework项目 Power Automate 还原误删的 Flow PowerShell 获取已删除的 Automate Flow PowerShell 新建 Address Book Policy PowerShell 批量下载 SharePoint Online 文档 PowerShell 清空 SharePoint Online 列表数据 PowerShell 新建 SharePoint Online 列表 PowerShell 获取 SharePoint Online 站点信息 PowerShell 启用 SharePoint Online CDN SharePoint Online 定时发布页面 SharePoint Online 页面诊断 Microsoft Whiteboard 的使用 SharePoint Online 网站配置时区 SharePoint Online 集成 Viva Connections SharePoint Online 分区模板 SharePoint Online 嵌入 Power BI 报表
PowerShell 批量添加用户到组
霖雨 · 2026-03-02 · via 博客园 - 霖雨

  前言

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

  正文

  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 命令,真的是谁用谁知道呀