Лучший отвечающий
PowerShell скрипт выгрузки фото из AD

Вопрос
-
Добрый день. Есть скрипт, который выгружает фото всех пользователей из 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
В чем может быть проблема?
4 июня 2013 г. 5:21
Ответы
-
Советую поставить все обновления для .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 }
- Помечено в качестве ответа Беленков Сергей 5 июня 2013 г. 5:24
5 июня 2013 г. 5:02Отвечающий
Все ответы
-
Попробуйте -ResultPageSize 200 например.
4 июня 2013 г. 6:44Отвечающий -
Пробовал разные значения, и 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 }
- Помечено в качестве ответа Беленков Сергей 5 июня 2013 г. 5:24
5 июня 2013 г. 5:02Отвечающий -
Спасибо, все отработало, тему можно закрывать5 июня 2013 г. 5:25