none
Set-UserPhoto из удаленной оснастки RRS feed

  • Вопрос

  • Всем привет!

    На одном из рядовых серверов в организации ежедневно работает powershell скрипт, которые производит необходимые нам операции с разными атрибутами учетной записи пользователя. Изменения затрагивают и учетку AD, и почтовый ящик, и учетку SfB и т.д.

    Недавно понадобилось вставить функционал актуализации фото. Вставил в скрипт функционал:

    add-pssnapin Microsoft.Exchange.Management.PowerShell.SnapIn
    
    $photo = ([Byte[]] $(Get-Content -Path $photopath -Encoding Byte -ReadCount 0))
    Set-UserPhoto -Identity $alias -PictureData $photo -Confirm:$False


    После проверки получаю ошибку:

    Set-UserPhoto : Cannot find information about the local server SERVERNAME in Active Directory. This may be related to a change in the server
     name.
    At line:3 char:1
    + Set-UserPhoto -Identity $alias -PictureData $photo -Confirm:$False
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Set-UserPhoto], LocalServerNotFoundException
        + FullyQualifiedErrorId : [Server=SERVERNAME,RequestId=a41d2764-ad5e-4728-ab23-c9bee023b661,TimeStamp=11.12.2017 7:16:54] [FailureCategory=Cmdlet-LocalS 
       erverNotFoundException] D5AAB249,Microsoft.Exchange.Management.RecipientTasks.SetUserPhoto


    Я подозреваю, что ошибка связана с тем, что командлет запускается из-под удаленной сессии, с загрузкой оснастки. Попробовал с того же сервера запустить Exchange Management Shell, там этот командлет прокатывает, однако не прокатывают несколько других вещей из скрипта. К примеру, я делаю подсчет сумм всех лимитов почтовых ящиков в базе. Когда я загружаю оснастку, он мне нормально суммирует значения:

    $box1.ProhibitSendReceiveQuota+$box2.ProhibitSendReceiveQuota

    А из-под Exchange Management Shell не суммирует. Видимо, различаются типы возвращаемых значений.

    Для нас приоритетнее было бы, если бы из-под подгружаемой оснастки удалось запустить работу командлета Set-UserPhoto.

    Господа гуру, подскажите, куда копать?

    Буду очень благодарен за ответы!!!

    11 декабря 2017 г. 8:46

Ответы


  • Попробуйте вот так:

    $exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://exchangeServer.com/PowerShell/" -Authentication Kerberos
    $photo = ([Byte[]] $(Get-Content -Path $photopath -Encoding Byte -ReadCount 0))
    Set-UserPhoto -Identity $alias -PictureData $photo -Confirm:$False
    Get-PSSession | Remove-PSSession

    • Помечено в качестве ответа centneroff 11 декабря 2017 г. 12:37
    11 декабря 2017 г. 11:07

Все ответы


  • Попробуйте вот так:

    $exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://exchangeServer.com/PowerShell/" -Authentication Kerberos
    $photo = ([Byte[]] $(Get-Content -Path $photopath -Encoding Byte -ReadCount 0))
    Set-UserPhoto -Identity $alias -PictureData $photo -Confirm:$False
    Get-PSSession | Remove-PSSession

    • Помечено в качестве ответа centneroff 11 декабря 2017 г. 12:37
    11 декабря 2017 г. 11:07
  • А вообще, попробуйте погуглить ошибку

    Раз

    Два

    11 декабря 2017 г. 11:12
  • Спасибо за совет!

    Плюсом сделал предварительную выгрузку оснастки:

    remove-pssnapin Microsoft.Exchange.Management.PowerShell.SnapIn
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://EXCHANGE/powershell
    Set-UserPhoto.....
    Remove-PSSession $Session
    add-pssnapin Microsoft.Exchange.Management.PowerShell.SnapIn

    11 декабря 2017 г. 12:36