Как добавить фото в атрибуты jpegPhoto и thumbnailPhoto пользователя в AD с помощью PowerShell GUI?

Пытаюсь сделать простую форму (с помощью PowerShell GUI) для редактирования атрибутов пользователя.
В форме есть три элемента управления, два Button ("Выбрать фото" и "Применить изменения") и PictureBox.
Идея заключается в следующем:
При нажатии кнопки "Выбрать фото", выбираю произвольное изображение, например userPhoto.jpg. С помощью функции Resize-Image уменьшаю изображение до нужного размера и вставляю его в PictureBox.
$imgFile = (get-item $openfiledialog.FileName)
$picturebox.Image = Resize-Image -InputFile $imgFile

До этого момента всё работает как задумано.
Хочу добиться того, что бы обрезанное изображение из PictureBox, без промежуточного сохранения в файл, можно было передать в атрибуты пользователя jpegPhoto и thumbnailPhoto с помощью командлета Set-ADUser.
Set-ADUser -Identity testUser -Replace @{ thumbnailPhoto = $picturebox.Image }
Set-ADUser -Identity testUser -Replace @{ jpegPhoto = $picturebox.Image }

При таком коде возникают ошибки:
Invalid type 'System.Management.Automation.PSCustomObject'.
Parameter name: thumbnailPhoto
    + CategoryInfo          : InvalidArgument: (testUser:ADUser) [Set-ADUser], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser
    + PSComputerName        : DC1.local.example.net
 
Invalid type 'System.Management.Automation.PSCustomObject'.
Parameter name: jpegPhoto
    + CategoryInfo          : InvalidArgument: (testUser:ADUser) [Set-ADUser], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser
    + PSComputerName        : DC1.local.example.net

Понимаю, проблема в этом месте (thumbnailPhoto = $picturebox.Image), но самостоятельно её решить не получается.
  • Вопрос задан
  • 965 просмотров
Решения вопроса 1
@ifossa Автор вопроса
Кажется разобрался.
Получилось примерно следующее:
$stream = New-Object System.IO.MemoryStream
$picturebox.Image.Save($stream, [System.Drawing.Imaging.ImageFormat]::Jpeg) | Out-Null
[byte[]]$pictureData = $stream.ToArray()
$stream.Dispose()
Set-ADUser -Identity testUser -Replace @{ thumbnailPhoto = $pictureData; jpegPhoto = $pictureData }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
GoooodBoy
@GoooodBoy
Вам фото надо конвертнуть перед тем как загрузить в AD

$photo = [byte[]](Get-Content "C:\temp\crusoe.jpg" -Encoding byte)
Set-ADUser -Identity testUser -Replace @{thumbnailPhoto=$photo}
Ответ написан
@D_mi_try
Для загрузки фото в АД рекомендую использовать CodeTwo Active Directory Photos
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы