VBScript:将现有 GPO 链接到新 OU

VBScript:将现有 GPO 链接到新 OU

我正在尝试使用此处找到的资源将现有 OU 链接到新 OU(刚刚创建):http://support.microsoft.com/kb/248392 和这里:http://www.thescriptlibrary.com/default.asp?Action=Display&Level=Category3&ScriptLanguage=VBScript&Category1=Active%20Directory&Category2=OUs&Title=Assign%20a%20New%20Group%20Policy%20Link%20to%20an%20OU,%20revised

问题是,当它执行 .Get("gPLink") 时,它会给出一个错误,提示“在缓存中找不到目录属性”。我相当肯定这是因为目前没有 GPO 链接到 OU,并且它至少需要一个(如果我错了,请纠正我)。

非常感谢您的任何提示和建议!谢谢

答案1

在没有看到你的脚本的情况下,我会说你的假​​设是合理的。你看到的错误应该出现在脚本中你“获取”“gpLink”属性的那一行。在那一行周围放一些错误捕获,你应该没问题。你链接到的第一个脚本有这样的错误捕获(尽管是在脚本顶部以“On Error Resume Next”的草率形式而不是在错误可能发生的位置有一个好的错误处理程序)。

编辑:

这是您在 Microsoft 上链接到的脚本的“混音”,其中包含一些有关我提到的“.Get”的错误处理。当未指定“gPLink”属性时,“.Get”会导致您看到的错误,因此使用“On Error Goto”捕获它会终止错误。(我真的应该检查返回了什么错误并针对返回的错误采取适当的行动......)

Option Explicit
Dim objiADSToolsDCFunctions, objOU, objGPOs, gPLink, i, gPOChosen

Const DNS_DOMAIN_NAME = "domain.com"
Const OU_DN = "ou=test,dc=domain,dc=com"

Set objiADSToolsDCFunctions = CreateObject("iadstools.dcfunctions")
Set objOU = GetObject("LDAP://" & DNS_DOMAIN_NAME & "/" & OU_DN)

objGPOs = objiADSToolsDCFunctions.GetGPOs("flounderball.gov","home-srv01")

If objGPOs > 0 Then
    For i = 1 to objGPOs
        WScript.Echo objiADSToolsDCFunctions.gponame(i)
        WScript.Echo Chr(9) & objiADSToolsDCFunctions.gpoguid(i)
    Next ' i

    WScript.Echo "The objOU you will be modifying is:"
    WScript.Echo Chr(9) & objOU.adspath

    gPOChosen = InputBox("Enter the name of the GPO to add (case insensitive):")

    If gPOChosen <> "" Then
        For i = 1 to objGPOs
            If LCase(objiADSToolsDCFunctions.gPOName(i)) = LCase(gPOChosen) Then
                On Error Resume Next
                gPLink = objOU.Get("gPLink")
                On Error Goto 0

                gPLink = gPLink & "[LDAP://CN=" & objiADSToolsDCFunctions.gPOGUID(i) & ",CN=Policies,CN=System," & objiADSToolsDCFunctions.getdefaultnamingcontext(DNS_DOMAIN_NAME) & ";0]"

                objOU.Put "gpLink", gpLink
                objOU.SetInfo

                WScript.Echo "Successfully added a link to this objOU for the GPO (" & objiADSToolsDCFunctions.gponame(i) & ")"
                Exit For
            End If
        Next ' i
    End If
End If

答案2

您的错误消息表明该属性未加载到对象的缓存中。那么,您为什么不尝试使用以下命令将其明确添加到对象的缓存中信息获取方法?

在您的行之前objContainer.Get("gPLink"),输入以下内容:

objContainer.GetInfoEx Array("gPLink"), 0

在我的域环境中这似乎不是必需的。但谁知道你的与我的有何不同。此外,当我针对未附加任何 GPO 的 OU 运行示例脚本时,只会strExistingGPLink设置为空字符串。

相关内容