2013-12-19 53 views
2

我必須使用powershell從活動目錄中的組策略修改gPCMachineExtensionNames屬性字符串。爲此,我首先要讀取現有的字符串,對其進行修改並用修改後的字符替換舊字符串。編輯gPCMachineExtensionNames屬性通過Powershell

該屬性在策略容器下定義: CN = {POLICY GUID},CN =策略,CN =系統,DC = [DOMAIN],DC = [COM]

當我瀏覽屬性與ADSI編輯時,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。我只能查詢其他屬性,如name,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')}' –