2013-12-19 5 views
2

Мне нужно модифицировать строку атрибута gPCMachineExtensionNames из политики группы в активном каталоге с помощью powershell. Для этого я сначала хочу прочитать существующую строку, изменить ее и заменить старый с измененным.Редактировать gPCMachineExtensionNames Атрибут через Powershell

атрибут определен в контейнере политики в: CN = {ПОЛИТИКЕ GUID}, CN = политика, CN = System, DC = [DOMAIN], DC = [COM]

Когда я просматриваю атрибут с помощью ADSI Edit, ценность gPCMachineExtensionNames правильно, как показано [{827D319E-6EAC-11D2-A4EA-00C04F79F83A} {803E14A0-B4FB-11D0-A0D0-00A0C90F574B}]

попытке выбрать значение с помощью LDAP запрос:

'(objectClass=groupPolicyContainer)' 
([adsisearcher]'(objectCategory=groupPolicyContainer)').FindAll() | ForEach-Object { 
     New-Object -TypeName PSCustomObject -Property @{ 
     abc = $_.Properties.gPCMachineExtensionNames -join '' 
     } 
    } 

Но результатом является emtpy. Я могу только запрашивать другие атрибуты, такие как имя, cn, USNCreated, displayname, .. Отображаются правильно. Почему невозможно вернуть значение атрибута gPCMachineExtensionNames?

Можно ли сделать другой запрос LDAP или есть другой способ запроса или изменения атрибута в Windows Server 2008 R2?

Спасибо за вашу поддержку!

ответ

1

Проверьте корпус имени:

$allGPOs = ([adsisearcher]'(objectCategory=groupPolicyContainer)').FindAll() 

# this returns nothing 
$allGPOs | % { $_.Properties.gPCmachineExtensionNames } 

# this returns what you expect 
$allGPOs | % { $_.Properties.gpcmachineextensionnames } 

$allGPOs | ForEach-Object { 
    New-Object -TypeName PSCustomObject -Property @{ 
     abc = $_.Properties.gpcmachineextensionnames -join '' 
    } 
} 

Я делаю предположение здесь, что, как $allGPOs.GetType() является SearchResultCollection и $allGPOs[0].Properties.GetType() является SearchResultCollection, они ведут себя несколько иначе, чем «обычные» пар имя/значение.

+0

Спасибо! Работает отлично! –

+0

Отличный рад, что он сработал. Надеюсь, кто-то, кто действительно знает, что они говорят, объяснит * почему * это чувствительно к регистру. – jscott

+1

Другим обходным путем является использование метода Item: '$ allGPOs | % {$ _. Properties.Item ('GPCMachineExtensionNames')} ' –

Смежные вопросы