Назад | Перейти на главную страницу

VBScript: привязка существующего объекта групповой политики к новому подразделению

Я пытаюсь связать существующее с новым 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%20isedOU%20to%20OUs

Проблема в том, что когда он выполняет .Get ("gPLink"), он выдает ошибку, которая говорит: "Свойство каталога не может быть найдено в кеше". Я вполне уверен, что это связано с тем, что в настоящее время нет GPO, связанных с OU, и он ожидает хотя бы один (поправьте меня, если я ошибаюсь).

Буду признателен за любые подсказки и подсказки! Спасибо

В вашем сообщении об ошибке указано, что свойство не загружено в кеш объекта. Так почему бы вам не попробовать явно добавить его в кеш объекта с помощью GetInfoEx метод?

Незадолго до твоего objContainer.Get("gPLink") строку, поставьте следующее:

objContainer.GetInfoEx Array("gPLink"), 0

В моей доменной среде это не кажется необходимым. Но кто знает, чем ваш отличается от моего. Кроме того, когда я запускаю свой пример сценария для подразделения, к которому не прикреплены какие-либо объекты групповой политики, strExistingGPLink просто устанавливается в пустую строку.

Не видя вашего сценария, я бы сказал, что ваша гипотеза разумна. Ошибка, которую вы видите, должна появиться в строке вашего скрипта, где вы ".Get" свойство "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