Profilbilleder til SharePoint med PowerShell
Active Directory Import i SharePoint Server tager ikke billederne med. Et script, der lægger en mappe med billeder op i User Photos og sætter dem på profilerne, og hvordan det gøres i Microsoft 365, hvor billedet ikke længere hører til SharePoint.
Active Directory Import i SharePoint Server importerer ikke brugernes billeder. Det gør kun synkroniseringen gennem Microsoft Identity Manager (Microsoft). Med AD Import skal billederne sættes på profilerne på anden vis. I 2014 brugte jeg et script fra SharePoint Use Cases, der tager en mappe med billeder, hvor filnavnet er brugerens kontonavn, lægger dem i biblioteket User Photos på My Site-værten og sætter billedets adresse på hver profil.
Opsætningen#
- En mappe til scriptet, fx
C:\SPSolutions\ImportProfileImages, med en undermappeProfileImages. - Billederne i
ProfileImagesmed kontonavnet som filnavn:jdoe.jpgfor<DOMÆNE>\jdoe. - Scriptet i mappen. Det køres i SharePoint Management Shell på en server i farmen, som en konto, der kan administrere brugerprofiltjenesten.
Kernen i scriptet#
Originalen har sine egne hjælpefunktioner til at finde biblioteket, filen og profilegenskabens navn. Det, den gør, er dette, forkortet og ikke kørt:
1Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
2
3$mySiteHostUrl = "http://<my-site-vaert>"
4$imageFolder = "C:\SPSolutions\ImportProfileImages\ProfileImages"
5$domain = "<DOMÆNE>"
6
7$web = Get-SPWeb $mySiteHostUrl
8$library = $web.Folders["User Photos"]
9$context = Get-SPServiceContext $web.Site
10$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
11
12foreach ($file in Get-ChildItem $imageFolder -File) {
13 $account = "$domain\$($file.BaseName)"
14 if (-not $upm.UserExists($account)) {
15 Write-Host "Ingen profil: $account"
16 continue
17 }
18
19 $bytes = [System.IO.File]::ReadAllBytes($file.FullName)
20 $spFile = $library.Files.Add("$($library.Url)/$($file.Name)", $bytes, $true)
21
22 $up = $upm.GetUserProfile($account)
23 $up["PictureURL"].Value = "$($web.Url)/$($spFile.Url)"
24 $up.Commit()
25 Write-Host "$account fik $($file.Name)"
26}
27
28Update-SPProfilePhotoStore -MySiteHostLocation $mySiteHostUrl -CreateThumbnailsForImportedPhotos $true
Update-SPProfilePhotoStore laver tre miniaturer i faste størrelser af hvert billede, lægger dem i User Photos og retter adressen på profilen (Microsoft).
Rettet i forhold til 2014-udgaven#
- Navnene passede ikke sammen. Vejledningen oprettede mappen
ImportProfileImagesog filenUpdateUserProfiles.ps1, men kørselsscriptet skiftede tilImportProfilePhotosog indlæsteUpdateProfiles.ps1. Fulgt ordret fandt det hverken mappen eller filen. - Billedet blev lagt op, før profilen blev fundet. Et filnavn uden en profil endte i User Photos alligevel. Nu tjekkes profilen først.
-CreateThumbnailsForImportedPhotosmanglede. Microsoft beskriverUpdate-SPProfilePhotoStoresom noget, der køres efter en opgradering, og parameteren er den, der laver miniaturer af importerede billeder. At miniaturerne ikke blev lavet uden den, har jeg ikke efterprøvet.- Tankestregen i
–MySiteHostLocationkom fra WordPress. Den er skiftet til en bindestreg.
I Microsoft 365#
Profilbilledet hører ikke til SharePoint i Microsoft 365. Det ligger i Exchange Online og Entra ID og vises i Outlook, Teams og SharePoint. Det sættes med Microsoft Graph PowerShell og må være op til 4 MB (Microsoft):
1Connect-MgGraph -Scopes "User.ReadWrite.All"
2
3foreach ($file in Get-ChildItem "C:\Profilbilleder" -File) {
4 Set-MgUserPhotoContent -UserId "$($file.BaseName)@<domæne>" -InFile $file.FullName
5}
Her er filnavnet delen før @ i brugerens UPN.
Set-UserPhotofindes i dag kun i Exchange Server. I Microsoft 365 er det Graph (Microsoft).- Hybrid med Entra Connect.
thumbnailPhotoi Active Directory synkroniseres og må være op til 100 KB, men Exchange Online tager kun imod et billede på højst 10 KB fra Entra ID. Større billeder skal sættes i admin center eller med Graph (Microsoft). - Hvor billedet må ændres, i skyen eller on-premises, er en indstilling for hele organisationen. En ændring kan tage op til 24 timer om at slå igennem (Microsoft).