通过Powershell编辑gPCMachineExtensionNames属性

时间:2013-12-19 09:23:55

标签: powershell ldap ldap-query group-policy adsi

我必须使用powershell修改活动目录中的组策略中的gPCMachineExtensionNames属性字符串。为此,我首先要读取现有的字符串,修改它并用修改后的旧字符替换。

该属性在策略容器中定义: CN = {POLICY GUID},CN =策略,CN =系统,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。我只能查询其他属性,如name,cn,USNCreated,displayname,..显示正确。为什么不能返回属性gPCMachineExtensionNames的值?

我可以创建另一个LDAP查询,还是有其他方法可以在Windows Server 2008 R2上查询或修改该属性?

感谢您的支持!

1 个答案:

答案 0 :(得分: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,它们的行为与“常规”名称/值对略有不同。