Set a user profile picture

  • Last update on February 27th, 2026

Table of Contents

Use the following CoreView custom action script to import user photos to Exchange in bulk through a SharePoint site.

Custom action script:

$myUrlSite = "https://<Domain>.sharepoint.com"
 $format = ".jpeg"
 #retrieve the current ps credential object from the sharepoint connection
 $cred = Get-PnPConnection
 #here you have to change the site context because we use the admin site when we open a Sharepoint connection
 Connect-PnPOnline -Url $myUrlSite -Credentials ($cred.PSCredential)
 $photos = @(Get-PnPFolderItem -FolderSiteRelativeUrl "photos" -ItemType File)
 foreach( $photo in $photos){
 if( $photo.Name.Contains("@<Domain name>.com")){
 $memoryStream = New-Object System.IO.MemoryStream
 $streamResult = $photo.OpenBinaryStream()
 Invoke-PnPQuery
 $streamResult.Value.CopyTo( $memoryStream)
 $imageArray = $memoryStream.ToArray()
 Set-UserPhoto -Identity $photo.Name.Replace($format, '') -PictureData $imageArray -Confirm: $false
 }
 }