Лучший отвечающий
get-adcomputer invalid enumeration context

Вопрос
-
Набросал небольшой скриптец, запускаю на весь домен:
Get-ADComputer -filter * -SearchBase "DC=domain,DC=local" -Properties operatingsystem | ForEach-Object{ if(Test-Connection -ComputerName $_.Name -Count 1 -Quiet) { If($_.Operatingsystem -like "*2008*" -or $_.Operatingsystem -like "*2012*" ) { $params = @{ "Namespace" = "root\cimv2\TerminalServices" "Class" = "Win32_TerminalServiceSetting" "ComputerName" = $_.Name} get-wmiobject @params | foreach{ new-object PSObject -property @{ "ComputerName" = $_.ServerName "TerminalServerMode" = $_.TerminalServerMode "LicenseServer" = $_.GetSpecifiedLicenseServerList().SpecifiedLSList } | select-object ComputerName,TerminalServerMode,LicenseServer } } elseif($_.Operatingsystem -like "*2003*") { $params = @{ "Namespace" = "root\cimv2" "Class" = "Win32_TerminalServiceSetting" "ComputerName" = $_.Name} get-wmiobject @params | foreach{ new-object PSObject -property @{ "ComputerName" = $_.ServerName "TerminalServerMode" = $_.TerminalServerMode "LicenseServer" = $_.GetSpecifiedLicenseServerList().SpecifiedLSList } | select-object ComputerName,TerminalServerMode,LicenseServer } } } else {Write-Host $_.Name "Not Ping"} }
Обрабатывает с сотню компов, а потом получаю invalid enumeration context
В get-adcomputer можно поиграть значение resultpagesize поставив например в значение 10, тогда выводит чуть больше, но все равно не достаточно. Как избавиться от этого?
9 июня 2015 г. 18:33
Ответы
-
1) Можно задать более жесткий фильтр:
Get-ADComputer -filter "OperaingSystem -like '*Server*' -and Enabled -eq '$true'" -ResultPageSize 10 -Properties operatingsystem
2) Использовать ADSI:
$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $Domain = [ADSI]"LDAP://$D" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.PageSize = 200 $Searcher.SearchScope = "subtree" $Searcher.Filter = "(&(objectcategory=computer)(operatingSystem=*Server*))" $Searcher.PropertiesToLoad.Add("operatingSystem") > $Null $Searcher.PropertiesToLoad.Add("name") > $Null $Searcher.SearchRoot = "LDAP://" + $Domain.distinguishedName $Results = $Searcher.FindAll() $Results | Foreach { $OS = $Result.Properties.Item("operatingsystem") $Name = $Result.Properties.Item("name") }
3) Установить атрибут IS_INDEXED = 1 для OperatingSystem - http://jeffwouters.nl/index.php/2013/09/1760/
- Изменено KazunEditor 9 июня 2015 г. 20:14
- Помечено в качестве ответа Дмитрий Трясов 11 июня 2015 г. 5:51
9 июня 2015 г. 19:50Отвечающий -
Все ответы
-
1) Можно задать более жесткий фильтр:
Get-ADComputer -filter "OperaingSystem -like '*Server*' -and Enabled -eq '$true'" -ResultPageSize 10 -Properties operatingsystem
2) Использовать ADSI:
$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $Domain = [ADSI]"LDAP://$D" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.PageSize = 200 $Searcher.SearchScope = "subtree" $Searcher.Filter = "(&(objectcategory=computer)(operatingSystem=*Server*))" $Searcher.PropertiesToLoad.Add("operatingSystem") > $Null $Searcher.PropertiesToLoad.Add("name") > $Null $Searcher.SearchRoot = "LDAP://" + $Domain.distinguishedName $Results = $Searcher.FindAll() $Results | Foreach { $OS = $Result.Properties.Item("operatingsystem") $Name = $Result.Properties.Item("name") }
3) Установить атрибут IS_INDEXED = 1 для OperatingSystem - http://jeffwouters.nl/index.php/2013/09/1760/
- Изменено KazunEditor 9 июня 2015 г. 20:14
- Помечено в качестве ответа Дмитрий Трясов 11 июня 2015 г. 5:51
9 июня 2015 г. 19:50Отвечающий -
Это ограничение в принципе у командлетов типа get-adcomputer, get-aduser и get-adobject?
Какое-то ограничение на размер буфера?
11 июня 2015 г. 5:52 -