网站搜索

SharePoint Online:使用 PowerShell 获取用户配置文件属性


要求:SharePoint Online 获取所有用户配置文件并导出到 CSV。

如何获取 SharePoint Online 中的用户配置文件属性?

在这篇博文中,我们将了解如何在 SharePoint Online 中获取用户配置文件属性。我们将了解如何使用 PowerShell for SharePoint Online、检索用户配置文件的属性,然后使用 SharePoint 管理中心获取特定用户的配置文件属性。我们还将查看一些示例脚本,这些脚本检索给定用户配置文件的特定属性或所有属性。

用户配置文件属性是保存“名字”、“姓氏”、“部门”、“技能”等用户数据的字段。默认情况下,SharePoint 已经拥有一组丰富的用户配置文件属性。若要获取 SharePoint Online 中的所有用户配置文件和用户配置文件属性,请执行以下步骤:

  1. 登录 SharePoint Online 管理中心 >> 单击左侧导航中的“更多功能”链接 >> 单击“用户配置文件”下的“打开”按钮。
  2. 在“用户配置文件”中,单击“人员”选项卡下的“管理用户配置文件”链接。

  3. 使用搜索获取用户的用户配置文件 >> 从上下文菜单中选择“编辑我的配置文件”。

这个接口可以帮助我们一一获取各个用户的个人资料和属性。现在,让我们看看如何使用 PowerShell 获取 SharePoint Online 中的用户配置文件属性。

要从用户配置文件服务获取所有可用属性,请使用:$UserProfile.UserProfileProperties.Keys

用于获取用户配置文件属性的 SharePoint Online PowerShell

以下是用于获取 SharePoint Online 中所有用户配置文件的 PowerShell。它从给定的网站集中获取特定用户的特定属性“部门”。


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

Function Get-SPOUserProfileProperty()
{
    param
    (
        [Parameter(Mandatory=$true)] [string] $AdminSiteURL,
        [Parameter(Mandatory=$true)] [string] $UserAccount,
        [Parameter(Mandatory=$true)] [string] $Property
    )    
    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($AdminSiteURL)
        $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 the User Profile Property
        Write-host $UserProfile.UserProfileProperties[$Property]

    }
    Catch {
        write-host -f Red "Error Getting User Profile Properties!" $_.Exception.Message
    }
}
#Call the function
$AdminSiteURL="https://crescent-admin.sharepoint.com"
$UserAccount="Kacper@crescent.com"
$Property="Department"

Get-SPOUserProfileProperty -AdminSiteURL $AdminSiteURL -UserAccount $UserAccount -Property $Property

此 PowerShell 获取特定用户的特定属性。同样,您可以使用 PowerShell 从 SharePoint Online 用户配置文件中获取任何可用的用户属性,例如电子邮件、经理等。

SharePoint Online:使用 PowerShell 获取用户配置文件属性

您还可以使用用户配置文件 Web 服务获取用户配置文件属性。具体方法如下:


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

#variables
$AdminCenterURL = "https://Crescent-admin.sharepoint.com"
$SiteURL="https://Crescent.sharepoint.com/"

#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

#Authenticate the web service
$UserProfileService= New-WebServiceProxy -Uri ("$AdminCenterURL/_vti_bin/UserProfileService.asmx?wsdl") -UseDefaultCredential False
$UserProfileService.Credentials = $Credentials
$URI = New-Object System.Uri($AdminCenterURL)
$Container = New-Object System.Net.CookieContainer
$Container.SetCookies($URI, $Credentials.GetAuthenticationCookie($AdminCenterURL))
$UserProfileService.CookieContainer = $Container

#Sets the first User profile, at index -1
$UserProfileResult = $UserProfileService.GetUserProfileByIndex(-1)

#To Get All Properties available: $UserProfileResult.UserProfile| Select name

#Loop through all user profiles
While ($UserProfileResult.NextValue -ne -1) 
{
    #Get the user UPN property
    $Property = $UserProfileResult.UserProfile | Where-Object { $_.Name -eq "SPS-UserPrincipalName"}
    Write-host $Property.Values[0].Value

    #Get Account Name
    $Property = $UserProfileResult.UserProfile | Where-Object { $_.Name -eq "AccountName"}
    Write-host $Property.Values[0].Value

    #Get the next profile
    $UserProfileResult = $UserProfileService.GetUserProfileByIndex($UserProfileResult.NextValue)
} 

PnP PowerShell 获取 SharePoint Online 中的用户配置文件属性

以下是如何使用 PnP PowerShell cmdlet Get-PnPUserProfileProperty 获取 SharePoint Online 中的所有用户配置文件属性:


#Set Variables
$SiteURL = "https://crescent.sharepoint.com"
$UserAccount = "Salaudeen@crescent.com"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get all properties of a User Profile
$UserProfile = Get-PnPUserProfileProperty -Account $UserAccount
$UserProfile.UserProfileProperties

该脚本从用户配置文件中检索所有属性。

Property Name
UserProfile_GUID
SID
ADGuid
AccountName
FirstName
SPS-PhoneticFirstName
LastName
SPS-PhoneticLastName
PreferredName
SPS-PhoneticDisplayName
WorkPhone
Department
Title
SPS-Department
Manager
AboutMe
PersonalSpace
PictureURL
UserName
QuickLinks
WebSite
PublicSiteRedirect
SPS-JobTitle
SPS-DataSource
SPS-MemberOf
SPS-Dotted-line
SPS-Peers
SPS-Responsibility
SPS-SipAddress
SPS-MySiteUpgrade
SPS-DontSuggestList
SPS-ProxyAddresses
SPS-HireDate
SPS-DisplayOrder
SPS-ClaimID
SPS-ClaimProviderID
SPS-LastColleagueAdded
SPS-OWAUrl
SPS-ResourceSID
SPS-ResourceAccountName
SPS-MasterAccountName
SPS-UserPrincipalName
SPS-O15FirstRunExperience
SPS-PersonalSiteInstantiationState
SPS-DistinguishedName
SPS-SourceObjectDN
SPS-LastKeywordAdded
SPS-ClaimProviderType
SPS-SavedAccountName
SPS-SavedSID
SPS-ObjectExists
SPS-PersonalSiteCapabilities
SPS-PersonalSiteFirstCreationTime
SPS-PersonalSiteLastCreationTime
SPS-PersonalSiteNumberOfRetries
SPS-PersonalSiteFirstCreationError
SPS-FeedIdentifier
WorkEmail
CellPhone
Fax
HomePhone
Office
SPS-Location
Assistant
SPS-PastProjects
SPS-Skills
SPS-School
SPS-Birthday
SPS-StatusNotes
SPS-Interests
SPS-HashTags
SPS-EmailOptin
SPS-PrivacyPeople
SPS-PrivacyActivity
SPS-PictureTimestamp
SPS-PicturePlaceholderState
SPS-PictureExchangeSyncState
SPS-MUILanguages
SPS-ContentLanguages
SPS-TimeZone
SPS-RegionalSettings-FollowWeb
SPS-Locale
SPS-CalendarType
SPS-AltCalendarType
SPS-AdjustHijriDays
SPS-ShowWeeks
SPS-WorkDays
SPS-WorkDayStartHour
SPS-WorkDayEndHour
SPS-Time24
SPS-FirstDayOfWeek
SPS-FirstWeekOfYear
SPS-RegionalSettings-Initialized
OfficeGraphEnabled
SPS-UserType
SPS-HideFromAddressLists
SPS-RecipientTypeDetails
DelveFlags
VideoUserPopup
PulseMRUPeople
msOnline-ObjectId
SPS-PointPublishingUrl
SPS-TenantInstanceId
SPS-SharePointHomeExperienceState
SPS-RefreshToken
SPS-MultiGeoFlags
PreferredDataLocation
Country

您可以通过以下方式查询特定属性:


Write-host $UserProfile.UserProfileProperties["Department"]

如果您需要从所有用户配置文件中获取所有属性并将其导出到 CSV 文件,请参阅另一篇文章:使用 PowerShell 在 SharePoint Online 中导出所有用户配置文件属性

相关文章