none
PowerShell скрипт выгрузки фото из AD RRS feed

  • Вопрос

  • Добрый день. Есть скрипт, который выгружает фото всех пользователей из AD:

    Import-Module ActiveDirectory
    get-aduser -filter {ObjectClass -eq "user"} -ResultSetSize $null -ResultPageSize 512 -Properties samaccountname,thumbnailphoto|`
    foreach { $login=$_.samaccountname;
    $path="c:\1\"+$login+".jpg";
    $user=Get-ADUser $login -Properties thumbnailphoto;
    if ($user.thumbnailphoto) {$user.thumbnailphoto | Set-Content $path -Encoding byte}
    $user=$null
    }

    Проблема в следующем - на рабочем компьютере (Windows 7 Enterprise) работает превосходно, а ни на одном контроллере домена (Windows Server 2008 R2) или серверах Exchange (2010 SP2) до конца не отрабатывает, выгружает все время разное количество фотографий и вылетает с ошибкой:

    Get-ADUser : Сервер вернул следующую ошибку: недопустимый контекст перечисления.
    C:\Script\exportphoto.ps1:6 знак:11
    + get-aduser <<<<  -filter {ObjectClass -eq "user"} -ResultSetSize $null -ResultPageSize 512 -Properties samaccountname,thumbnailphoto|`
        + CategoryInfo          : NotSpecified: (:) [Get-ADUser], ADException
        + FullyQualifiedErrorId : Сервер вернул следующую ошибку: недопустимый контекст перечисления.,Microsoft.ActiveDirectory.Management.Commands.GetADUser

    В чем может быть проблема?

Ответы

  • Советую поставить все обновления для .Net Framework,если не стоят.

    Как вариант можно воспользоваться ADSI:

    $Searcher = [adsisearcher]"(&(objectCategory=person)(objectClass=user)(thumbnailphoto=*))"
    $Searcher.PageSize  = 200
    $Searcher.SearchScope  = "subtree"
    
    $Attributes = "samaccountname","thumbnailphoto"
    ForEach($Attribute  In $Attributes)
    {
         $Searcher.PropertiesToLoad.Add($Attribute) | Out-Null
    }
    
    $Results =  $Searcher.FindAll()
    ForEach ($Result In $Results)
    {
         $login = $Result.Properties.Item("sAMAccountName")
         $user  = $Result.Properties.Item("thumbnailphoto")
         $path="c:\1\$login.jpg"
         $user| Set-Content $path -Encoding byte
    }

    Отвечающий

Все ответы

  • Попробуйте  -ResultPageSize 200 например.

    Отвечающий
  • Пробовал разные значения, и 100, и 200, и 50, и вообще без этого параметра - по умолчанию 256 - все равно на контроллерах домена и на серверах Exchange вылетает. Может это какая-то особенность PowerShell именно на серверных операционках - на Windows 7 все работает идеально. Пробовал на разных машинах.
    4 июня 2013 г. 23:03
  • Советую поставить все обновления для .Net Framework,если не стоят.

    Как вариант можно воспользоваться ADSI:

    $Searcher = [adsisearcher]"(&(objectCategory=person)(objectClass=user)(thumbnailphoto=*))"
    $Searcher.PageSize  = 200
    $Searcher.SearchScope  = "subtree"
    
    $Attributes = "samaccountname","thumbnailphoto"
    ForEach($Attribute  In $Attributes)
    {
         $Searcher.PropertiesToLoad.Add($Attribute) | Out-Null
    }
    
    $Results =  $Searcher.FindAll()
    ForEach ($Result In $Results)
    {
         $login = $Result.Properties.Item("sAMAccountName")
         $user  = $Result.Properties.Item("thumbnailphoto")
         $path="c:\1\$login.jpg"
         $user| Set-Content $path -Encoding byte
    }

    Отвечающий
  • Спасибо, все отработало, тему можно закрывать