当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 批量更新用户配置文件

作者:精品下载站 日期:2024-12-14 15:39:02 浏览:15 分类:玩电脑

SharePoint Online:使用 PowerShell 批量更新用户配置文件


要求:默认情况下,SharePoint Online 仅同步 Azure AD 中的特定属性。用户配置文件服务中没有可用的自定义属性映射。我们必须编写自己的脚本或实用程序来将其他属性同步到 SharePoint Online 用户配置文件。

如何批量更新 SharePoint Online 中的用户配置文件?

虽然我们可以使用客户端对象模型更新用户配置文件属性,但批量更新用户配置文件属性 API 效率更高,尤其是在处理数千个配置文件以批量更新 SharePoint Online 的自定义用户配置文件属性时;在本指南中,我们将逐步介绍使用 PowerShell 更新 SharePoint Online 中的用户配置文件的步骤。以下是该流程的高级运作方式:

[玩转系统] SharePoint Online:使用 PowerShell 批量更新用户配置文件

请注意,此方法不支持 SharePoint Online 中的可编辑属性以避免覆盖。假设您想要同步自定义属性或默认情况下未与 SharePoint Online 同步的属性。在这种情况下,您必须在 SharePoint Online 管理中心的“用户配置文件服务”的“管理用户属性”中取消选中“允许用户编辑此属性的值”值。否则,您将看到“New-PnPUPABulkImportJob:属性名称 [Country、CellPhone] 可由用户编辑。”错误信息!

在 Azure AD 和 SharePoint Online 之间映射用户配置文件属性

首先,我们需要映射 Azure AD 和 SharePoint Online 中的属性。要从 Azure AD 获取所有可用属性,请使用以下 PowerShell:


#Set Parameter - Any valid user account
$UserUPN = "[email protected]"

#Connect to AzureAD
Connect-AzureAD -Credential $Cred | Out-Null

#Get All attributes of the User
Get-AzureADUser -ObjectId $UserUPN | Get-Member -MemberType Properties

#To Get Extended properties, use: Get-AzureADUser -ObjectId $UserUPN | Select -ExpandProperty ExtensionProperty

要检索 SharePoint Online 中可用的所有用户配置文件属性,请使用:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.UserProfiles.dll"

#Parameters
$TenantURL ="https://crescent.sharepoint.com"
$UserAccount="[email protected]"

Try {
    #Setup Credentials to connect
    $Cred= Get-Credential
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($TenantURL)
    $Ctx.Credentials = $Credentials
         
    #Get the User
    $User = $Ctx.web.EnsureUser($UserAccount)
    $Ctx.Load($User)
    $Ctx.ExecuteQuery()
 
    #Get User Profile
    $PeopleManager = New-Object Microsoft.SharePoint.Client.UserProfiles.PeopleManager($Ctx)
    $UserProfile = $PeopleManager.GetPropertiesFor($User.LoginName)
    $Ctx.Load($UserProfile)
    $Ctx.ExecuteQuery()

    #Get all User Profile Properties - $UserProfile.UserProfileProperties to get properties along with values
    $UserProfile.UserProfileProperties.Keys
}
Catch {
    write-host -f Red "Error Getting User Profile Properties!" $_.Exception.Message
}

以下是 SharePoint Online 中可用的所有用户配置文件属性的列表:

  • 用户配置文件_GUID
  • 安全识别码
  • 广告指南
  • 帐户名称
  • SPS-拼音名字
  • SPS-拼音姓氏
  • 首选名称
  • SPS-拼音显示名称
  • 工作电话
  • 部门
  • 标题
  • SPS-部门
  • 经理
  • 关于我
  • 个人空间
  • 图片网址
  • 用户名
  • 快速链接
  • 网站
  • 公共站点重定向
  • SPS-职位名称
  • SPS数据源
  • SPS会员
  • SPS-虚线
  • SPS-同行
  • SPS-责任
  • SPS-Sip地址
  • SPS-MySite升级
  • SPS不建议列表
  • SPS-代理地址
  • SPS-雇用日期
  • SPS显示顺序
  • SPS-索赔ID
  • SPS-ClaimProviderID
  • SPS-添加最后一位同事
  • SPS-OWAURL
  • SPS资源SID
  • SPS-资源帐户名称
  • SPS-主帐户名
  • SPS-用户主体名称
  • SPS-O15首次运行体验
  • SPS-个人站点实例化状态
  • SPS 专有名称
  • SPS-源对象DN
  • SPS-最后添加的关键字
  • SPS-索赔提供者类型
  • SPS-保存的帐户名
  • SPS保存的SID
  • SPS-对象存在
  • 个人站点功能
  • SPS-个人站点首次创建时间
  • SPS-个人站点上次创建时间
  • SPS-个人站点重试次数
  • SPS-个人站点首次创建错误
  • SPS-饲料标识符
  • 工作邮箱
  • 手机
  • 传真
  • 家庭电话
  • 办公室
  • SPS-位置
  • 助手
  • SPS-过去的项目
  • SPS-技能
  • SPS-学校
  • SPS-生日
  • SPS-状态注释
  • SPS-兴趣
  • SPS-哈希标签
  • SPS-电子邮件选择
  • SPS-隐私人
  • SPS-隐私活动
  • SPS-图片时间戳
  • SPS-图片占位符状态
  • SPS-PictureExchangeSyncState
  • SPS-MUI语言
  • SPS-内容语言
  • SPS-时区
  • SPS-区域设置-FollowWeb
  • SPS-区域设置
  • SPS-日历类型
  • SPS-Alt日历类型
  • SPS-调整回历日
  • SPS-ShowWeeks
  • SPS-工作日
  • SPS-工作日开始时间
  • SPS-工作日结束时间
  • SPS-Time24
  • SPS-第一周
  • SPS-第一周
  • SPS-区域设置-初始化
  • OfficeGraph启用
  • SPS-用户类型
  • SPS-隐藏地址列表
  • SPS-收件人类型详细信息
  • 探索标志
  • 视频用户弹出窗口
  • 脉冲MRU人
  • msOnline-ObjectId
  • SPS-PointPublishingUrl
  • SPS-租户实例ID
  • SPS-SharePointHomeExperienceState
  • SPS-刷新令牌
  • SPS-多地理标志
  • 首选数据位置
  • 国家

获得字段后,根据您的要求映射它们。

PowerShell 批量更新 SharePoint Online 中的用户配置文件:

由于 SharePoint Online 不允许您将自定义字段从 Azure AD 映射到用户配置文件中,因此您必须使用 PowerShell(或任何其他自定义工具)手动处理它。在 SharePoint 网站中创建一个文档库来存储导入日志,根据您的环境在此脚本中设置参数、映射属性,然后运行该脚本。在我的场景中,我映射了默认情况下未与 SharePoint Online 映射的“国家/地区”和“移动设备”属性。


#Function to Extract User profile Property
Function Extract-ADUserProperties
{
    Param ([Parameter(Mandatory=$true)][string[]]$ADProperties, [Parameter(Mandatory=$true)][PSCredential]$Cred)
 
    Try {
        #Connect to AzureAD
        Connect-AzureAD -Credential $Cred | Out-Null
 
        #Get All Users from AzureAD
        $AllUsers = Get-AzureADUser -All:$True
        Write-host "Total Number of User Profiles Found:"$AllUsers.Count  
        $UserProfileDataColl = @()
 
        #Iterate through All User profiles
        $Counter = 1
        ForEach($User in $AllUsers)
        {
            $UserProfileData = New-Object PSObject
            $UserProfileData | Add-Member NoteProperty IDName($User.UserPrincipalName)

            #Get Value of each property of the user
            ForEach($ADProperty in $ADProperties)
            {
                #Get User Profile Property value
                $ADPropertyValue = $User | Select -ExpandProperty $ADProperty
                If(!$ADPropertyValue) {$ADPropertyValue = [string]::Empty}
                $UserProfileData | Add-Member NoteProperty $ADProperty($ADPropertyValue)
            }
            $UserProfileDataColl += $UserProfileData
            Write-Progress -Activity "Getting User Profile Data..." -Status "Getting User Profile $Counter of $($AllUsers.Count)" -PercentComplete (($Counter / $AllUsers.Count)  * 100)
            $Counter++
        }
        #Convert data to required Json format
        $JsonData = $UserProfileDataColl | ConvertTo-Json
        $JSON = @"
        { "value":
            $JsonData
        }
"@
        #Export JSON to a File
        $JSON | Out-File -FilePath $Env:TEMP/UserProfileData.JSON -Force
        Write-host "Extracted user profile Properties Successfully!" -f Green
    }
    Catch {
        write-host -f Red "Error Getting User Profile Properties!" $_.Exception.Message
    }
}

#Call the function to Extract User profile data to JSON
Extract-ADUserProperties -ADProperties @("Country", "Mobile") -Cred (Get-Credential)

#Parameters
$SiteUrl = "https://crescent.sharepoint.com"
$SiteRelativeFolderPath = "/User Profile Import"

#Connect to site
Connect-PnPOnline $SiteUrl -Credentials (Get-Credential)

#Call the Bulk Import Job - Mapping in format AzureAD User Attribute = SharePoint User Profile Property
New-PnPUPABulkImportJob -Folder $SiteRelativeFolderPath -Path $Env:TEMP/UserProfileData.JSON -IdProperty "IdName" -UserProfilePropertyMapping @{"Country"="Country";"Mobile"="CellPhone"}

此脚本将映射的属性从 Azure AD 提取为 JSON 文件格式,然后启动配置文件属性导入作业以更新 JSON 中的用户配置文件属性。

[玩转系统] SharePoint Online:使用 PowerShell 批量更新用户配置文件

检查导入作业的状态

要检查导入作业状态,请使用以下命令:


Get-PnPUPABulkImportStatus

我们如何自动化这个 PowerShell 脚本?

创建Windows计划任务,创建用于身份验证的App ID,并在脚本中使用它。以下是一个示例:如何使用 PnP PowerShell 连接到 SharePoint Online - 使用 AppID 和 AppSecret?,请确保在租户级别授予对 App ID 的完全控制权。

我关于 SharePoint Online 用户配置文件更新的其他帖子:

  • SharePoint Online:使用 PowerShell 更新用户配置文件属性
  • SharePoint Online:使用 PowerShell 从 Azure AD 同步用户配置文件属性

总之,与单独手动更新每个配置文件相比,使用 PowerShell 批量更新 SharePoint Online 中的用户配置文件可以节省大量时间和精力。通过利用 PnP PowerShell 中的 New-PnPUPABulkImportJob cmdlet,管理员只需几行代码即可轻松更新多个用户配置文件。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯