【问题标题】:Edit gPCMachineExtensionNames Attribute via Powershell通过 Powershell 编辑 gPCMachineExtensionNames 属性
【发布时间】:2013-12-19 09:23:54
【问题描述】:

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

该属性在策略容器中定义如下: CN={POLICY GUID},CN=Policies,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 ''
      }
  }

但结果是空的。我只能查询name,cn,USNCreated,displayname,..等其他属性。显示正确。为什么不能返回属性 gPCMachineExtensionNames 的值?

我可以进行另一个 LDAP 查询吗?或者是否有其他方法可以查询或修改 Windows Server 2008 R2 上的属性?

感谢您的支持!

【问题讨论】:

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


    【解决方案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,它们的行为与“常规”名称/值对略有不同。

    【讨论】:

    • 谢谢!完美运行!
    • 很高兴它成功了。希望真正知道他们在说什么的人会解释为什么这是区分大小写的。
    • 另一种解决方法是使用 Item 方法:$allGPOs | % { $_.Properties.Item('GPCMachineExtensionNames') }
    猜你喜欢
    • 2014-01-22
    • 2014-09-12
    • 1970-01-01
    • 2010-12-03
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多