我必须使用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上查询或修改该属性?
感谢您的支持!
答案 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,它们的行为与“常规”名称/值对略有不同。