SharePoint Online: PowerShell kullanarak Kullanıcı Profillerini Toplu Güncelleştirme
Gereksinim: Varsayılan olarak, SharePoint Online, Azure AD'den yalnızca belirli özellikleri senkronize eder. Kullanıcı profili hizmetinde özel özellik eşlemesi yoktur. Ek özellikleri SharePoint Online kullanıcı profilleriyle senkronize etmek için kendi komut dosyamızı veya yardımcı programımızı yazmamız gerekiyor.
SharePoint Online'da Kullanıcı Profillerini Toplu Güncelleştirme Nasıl Yapılır?
İstemci tarafı nesne modelini kullanarak kullanıcı profili özelliklerini güncelleştirebilsek de, toplu güncelleme kullanıcı profili özellikleri API'si, özellikle SharePoint Online için özel kullanıcı profili özelliklerini toplu olarak güncellemek üzere binlerce profille uğraşırken daha verimlidir; Bu kılavuzda, SharePoint Online'daki kullanıcı profillerini güncellemek için PowerShell'i kullanma adımlarını anlatacağız. Süreç yüksek düzeyde şu şekilde işliyor:
Üzerine yazmayı önlemek için bu yöntemin SharePoint Online'daki düzenlenebilir özellikleri desteklemediğini lütfen unutmayın. Özel özelliklerinizi veya varsayılan olarak SharePoint Online ile senkronize edilmemiş özelliklerinizi senkronize etmek istediğinizi varsayalım. Bu durumda, SharePoint Online yönetim merkezindeki "Kullanıcı profili hizmeti"nin "Kullanıcı özelliklerini yönet" bölümündeki "Kullanıcıların bu özellik için değerleri düzenlemesine izin ver" değerinin işaretini kaldırmanız gerekir. Aksi halde, "New-PnPUPABulkImportJob: Özellik Adları [Ülke, Cep Telefonu] kullanıcı tarafından düzenlenebilir." ifadesini görürsünüz. hata mesajı!
Azure AD ile SharePoint Online arasında kullanıcı profili özelliklerini eşleme
Başlamak için hem Azure AD'de hem de SharePoint Online'da eşlenecek özniteliklere ihtiyacımız var. Azure AD'deki tüm kullanılabilir öznitelikleri almak için bu PowerShell'i kullanın:
#Set Parameter - Any valid user account
$UserUPN = "Salaudeen@crescent.com"
#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'da bulunan tüm kullanıcı profili özelliklerini almak için şunu kullanın:
#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"
#Parameters
$TenantURL ="https://crescent.sharepoint.com"
$UserAccount="salaudeen@crescent.com"
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'da bulunan tüm kullanıcı profili özelliklerinin listesi aşağıdadır:
- Kullanıcı Profili_GUID
- SID
- AD Guid'i
- Hesap adı
- İlk adı
- SPS-FonetikFirstName
- Soy isim
- SPS-FonetikSoyadı
- Tercih edilen isim
- SPS-FonetikGörüntüAdı
- İş telefonu
- Departman
- Başlık
- SPS-Departmanı
- Müdür
- Benim hakkımda
- Kişisel alan
- Resim url
- Kullanıcı adı
- Hızlı Linkler
- İnternet sitesi
- GenelSiteYönlendirmesi
- SPS-İş Başlığı
- SPS-Veri Kaynağı
- SPS-Üyesi
- SPS-Noktalı çizgi
- SPS-Akranları
- SPS Sorumluluğu
- SPS-SipAdresi
- SPS-MySiteUpgrade
- SPS-DontSuggestList
- SPS-ProxyAdresleri
- SPS-İşe Alma Tarihi
- SPS-Görüntü Sırası
- SPS-Talep Kimliği
- SPS-Talep Sağlayıcı Kimliği
- SPS-LastColleagueEklendi
- SPS-OWAUrl
- SPS-KaynakSID'si
- SPS-Kaynak HesabıAdı
- SPS-Ana HesapAdı
- SPS-KullanıcıPrincipalName
- SPS-O15İlk Çalıştırma Deneyimi
- SPS-KişiselSiteÖrnekleme Durumu
- SPS-Ayrıntılı İsim
- SPS-SourceObjectDN
- SPS-SonAnahtar KelimeEklendi
- SPS-ClaimProviderType
- SPS-KayıtlıHesapAdı
- SPS-KayıtlıSID
- SPS-ObjectExists
- SPS-KişiselSiteYetenekleri
- SPS-PersonalSiteFirstCreationTime
- SPS-PersonalSiteLastCreationTime
- SPS-KişiselSiteYeniden Deneme Sayısı
- SPS-PersonalSiteFirstCreationError
- SPS-FeedIdentifier
- İş e - postası
- Cep telefonu
- Faks
- Ev telefonu
- Ofis
- SPS-Konumu
- Asistan
- SPS-Geçmiş Projeler
- SPS-Becerileri
- SPS-Okul
- SPS-Doğum Günü
- SPS-Durum Notları
- SPS-İlgi Alanları
- SPS-HashTags
- SPS-EmailOptin
- SPS-Gizlilik Kişileri
- SPS-Gizlilik Etkinliği
- SPS-ResimZaman Damgası
- SPS-PicturePlaceholderState
- SPS-PictureExchangeSyncState
- SPS-MUILanguages
- SPS-İçerik Dilleri
- SPS-Saat Dilimi
- SPS-BölgeselAyarlar-FollowWeb
- SPS-Yerel Ayar
- SPS-Takvim Türü
- SPS-AltCalendarType
- SPS-AdjustHijriDays
- SPS-ShowWeeks
- SPS-İş Günleri
- SPS-İşGünüBaşlangıçSaati
- SPS-İşGünüBitişSaati
- SPS-Zamanı24
- SPS-FirstDayOfWeek
- SPS-Yılın İlk Haftası
- SPS-RegionalSettings-Başlatıldı
- OfficeGraphEtkin
- SPS-Kullanıcı Türü
- SPS-Adres Listelerinden Gizle
- SPS-Alıcı Türü Ayrıntıları
- DelveFlag'ler
- VideoKullanıcıAçılır Pencere
- NabızMRUPİnsanlar
- msOnline-ObjectId
- SPS-PointPublishingURL
- SPS-KiracıÖrnek Kimliği
- SPS-SharePointHomeExperienceState
- SPS-YenilemeTokeni
- SPS-MultiGeoFlag'ler
- Tercih EdilenVeriKonumu
- Ülke
Alanları aldıktan sonra bunları ihtiyacınıza göre eşleyin.
PowerShell, SharePoint Online'da Kullanıcı Profillerini Toplu Güncelleştirecek:
SharePoint Online, Azure AD'deki özel alanları kullanıcı profilleriyle eşlemenize izin vermediğinden, bunu PowerShell (veya başka bir özel araç) kullanarak manuel olarak yapmanız gerekir. İçe aktarma günlüklerini depolamak için SharePoint sitesinde bir belge kitaplığı oluşturun, bu komut dosyasındaki parametreleri ortamınıza ve harita özelliklerine göre ayarlayın ve ardından komut dosyasını çalıştırın. Senaryomda, varsayılan olarak SharePoint Online ile eşlenmeyen Ülke ve Mobil özelliklerini eşledim.
#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"}
Bu betik, eşlenen özellikleri Azure AD'den bir JSON dosya biçimine çıkarır ve ardından JSON'dan kullanıcı profili özniteliklerini güncelleştirmek için profil özelliklerini içe aktarma işini başlatır.
Bir içe aktarma işinin durumunu kontrol edin
İçe aktarma işi durumunu kontrol etmek için aşağıdakileri kullanın:
Get-PnPUPABulkImportStatus
Bu PowerShell betiğini nasıl otomatikleştiririz?
Zamanlanmış bir Windows görevi oluşturun, kimlik doğrulama için bir Uygulama Kimliği oluşturun ve bunu komut dosyasında kullanın. İşte bir örnek: PnP PowerShell kullanarak - AppID ve AppSecret kullanarak SharePoint Online'a nasıl bağlanılır? Kiracı düzeyinde Uygulama Kimliğine tam denetim verdiğinizden emin olun.
SharePoint Online kullanıcı profili güncellemesindeki diğer gönderilerim:
- SharePoint Online: PowerShell'i kullanarak Kullanıcı Profili Özelliklerini Güncelleme
- SharePoint Online: Kullanıcı Profili Özelliğini PowerShell kullanarak Azure AD'den eşitleyin
Sonuç olarak, SharePoint Online'da kullanıcı profillerini toplu olarak güncellemek için PowerShell'i kullanmak, her profili tek tek manuel olarak güncellemeye kıyasla önemli miktarda zaman ve emek tasarrufu sağlayabilir. Yöneticiler, PnP PowerShell'in New-PnPUPABulkImportJob cmdlet'ini kullanarak, yalnızca birkaç satır kodla birden fazla kullanıcı profilini kolayca güncelleyebilir.

