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

推荐订阅源

S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
Y
Y Combinator Blog
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
M
MIT News - Artificial intelligence
Last Week in AI
Last Week in AI
V
V2EX
腾讯CDC
F
Fortinet All Blogs
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss

博客园 - 霖雨

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