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