Наверное, ни для кого не секрет, что в SP 2016 убрали FIM
и на его основе сделали MIM.
Но как быть если хочется погружать свойства из AD в свойства
пользователей и при этом не ставить MIM.
В этой статье я расскажу, как можно с помощью PowerShell загрузить фото.
Принцип работы такой:
- Из AD получаем всех пользователей, у которых есть фото.
- Далее пробегаем по ним и сохраняем файлы фотографий локально на диск сервера.
- Следующим этапом циклом проходим по файлам на диске и загружаем их SP
так же обновлять доп свойства которые не импортируются по умолчанию.
Скрипт можно сохранить в файл и запускать по через задания Windows, при этом будут создаваться записи в EventViewer.
для использования необходимо поменять значения переменных
$MySiteUrl = "https://my.company.ru"
$LocalPath = "C:\temp\folder"
$domain = "My-CORP\"
$domainOU = "DC=my-corp,DC=local"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | if(( Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell" }) -eq $null ) { Add-PSSnapin Microsoft.SharePoint.PowerShell; } function Upload -PhotosToSP { Param ( [parameter(Mandatory= $true )][string] $LocalPath , [parameter(Mandatory= $true )][string] $MySiteUrl , [parameter(Mandatory= $true )][string] $Domain , [parameter(Mandatory= $false )][switch] $Overwrite ) $mySiteHostSite = Get -SPSite $MySiteUrl $mySiteHostWeb = $mySiteHostSite .OpenWeb() $context = Get -SPServiceContext $mySiteHostSite $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager( $context ) try { #Get files from local folder $localPhotosFolder = Get-ChildItem $LocalPath #Get User Photos document library in the My Site host site $spPhotosFolder = $mySiteHostWeb .GetFolder( "User Photos" ) #Upload each image file and configure user profiles $localPhotosFolder | ForEach-Object { #Generate file path for upload into SharePoint $spFullPath = $spPhotosFolder .Url + "/" + $_.Name #Check if the file exists and the overwrite option is selected before adding the file if ((! $mySiteHostWeb .GetFile( $spFullPath ).Exists) -or ( $Overwrite )) { #Add file to the User Photos library $spFile = $spPhotosFolder .Files.Add( $spFullPath , $_.OpenRead(), $true ) $spImagePath = $mySiteHostWeb .Url + "/" + $spFile .Url #Get the domain and user name from the image file name $adAccount = $_.Name -replace ".jpg" , "" ; $adAccountFull = "$Domain$adAccount" $users = $profileManager .Search( $adAccount ) foreach ( $user in $users ){ if( $user .ProfileType -eq "User" ){ $userId = $user .RecordId if ( $userId -ne $null ) { $up = $profileManager .GetUserProfile( $userId ) $up .AccountName #Get user profile and change the Picture URL value if( $up .AccountName -eq $adAccountFull ){ Write-host $up .AccountName -ForegroundColor Blue $up [ "PictureURL" ].Value = $spImagePath $up .Commit() }else{ Write-host "логин не соответствует - " $adAccountFull -ForegroundColor Red } } else { write-host "Profile for user" $adAccount "cannot be found" } } } } else { write-host "`nFile" $_.Name "already exists in" $spFullPath .Replace( "/" + $_.Name, "" ) "and shall not be uploaded" -foregroundcolor Red } } #Run the Update-SPProfilePhotoStore cmdlet to create image thumbnails and update user profiles write-host "Waiting to update profile photo store - Please wait..." Start-Sleep -s 60 Update -SPProfilePhotoStore –MySiteHostLocation $MySiteUrl write-host "Profile photo store update run - please check thumbnails are present in Profile Pictures folder." } catch { write-host "The script has stopped because there has been an error: " $_ } finally { #Dispose of site and web objects $mySiteHostWeb .Dispose() $mySiteHostSite .Dispose() } } $LocalPath = "C:\temp\folder" $domain = "My -CORP \" $domainOU = "DC=my-corp,DC=local" cls #Старт полной синхронизации $upa = Get -SPServiceApplication | where {$_.TypeName -eq "User Profile Service Application" } $upa .StartImport( $true ) Import -Module ActiveDirectory $users = Get -ADUser -Filter * -SearchBase $domainOU -Properties thumbnailPhoto | ? {$_.thumbnailPhoto} #| select Name $count = 0 foreach ( $user in $users ) { $count = $count + 1 Write -Progress -Activity "Загрузка фотографий из AD " -status "текущий элемент № $count" -percentComplete ( $count / $users .Count * 100) $user .SamAccountName $name = $user .SamAccountName + ".jpg" $user .jpegPhoto | Set-Content ( "$LocalPath\$($User.SamAccountName).jpg" ) -Encoding byte } start-sleep 3 write -progress one one -completed Write-Host "фото загружены на диск сервера." Upload -PhotosToSP -LocalPath $LocalPath -MySiteUrl $MySiteUrl -Domain $domain -Overwrite Write-Host "Удаление не синхронизированных пользователей." -ForegroundColor Green Set -SPProfileServiceApplication -Identity $upa -PurgeNonImportedObjects $true #Set-SPProfileServiceApplication -Identity $upa -GetNonImportedObjects $true Write-Host "Обновление свойств пользователя." $context = Get -SPServiceContext ( $MySiteUrl ) $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager( $context ) $users = $profileManager .GetEnumerator() $count = 0 foreach ( $user in $users ){ $userLogin = ( $user .AccountName).Replace( $domain , "" ) $count = $count + 1 Write -Progress -Activity "Обновление свойств пользователя " -status "текущий пользователь № $count" -percentComplete ( $count / $profileManager .Count * 100) $userAD = Get -ADUser -Identity $userLogin -Properties "Company" if( $userAD .Company -ne $null -and $userAD .Company -ne "" ){ # Write-Host $user.DisplayName // $userAD.Company -ForegroundColor Green $user [ "Company" ].Value = $userAD .Company $user .Commit() } } New -EventLog –LogName Application –Source "SST-SharePoint" Write -EventLog -LogName "Application" -Source "SST-SharePoint" -EventID 11111 -EntryType Information -Message "Фото обновлены" -Category "Update User Photo" |
Комментариев нет:
Отправить комментарий