2015-10-20 2 views
1

У меня есть HTA-файл, который просто зависает при переходе через записи группы из запроса LDAP.Контур объекта LDAP Group

Set objUser = GetObject("LDAP://" & strUserDN) 

For Each objGroup In objUser.Groups 
    If "wifi user" = lcase(replace(objGroup.Name,"CN=","")) Then 
     'modify my dom element here.... 
    End If 
    If "encryption enabled" = lcase(replace(objGroup.Name,"CN=","")) Then 
     'modify my dom element here.... 
    End If 
    If "dl - some office" = lcase(replace(objGroup.Name,"CN=","")) Then 
     'modify my dom element here.... 
    End If 
Next 

Есть ли более эффективный способ для перебора этих групп, 80+ целый ряд групп его циклами и вызывающих проблемы.

Или, может быть, я пытаюсь вывести весь список в строку и выполнить запрос InStr?

+0

извините, страшный пример, мой фактический код - все в нижнем регистре. поздно ночью blur ... Спасибо, что поймали, и я отредактирую свою публикацию. – ssaviers

+0

Вы определили, в какой момент код висит, вызов 'GetObject' или где-то внутри цикла? Если код висит внутри цикла: где именно. Если вы не изолировали проблемный оператор, попробуйте добавить операторы MsgBox (или инструкции, записывающие в файл журнала) после каждой операции. –

+0

, когда я говорю «зависание», я полагаю, что его просто повесить на приложение HTA. если я запустил свой запрос с куском выше, где он зацикливает объект «Группы», он запускается в среднем за 2 секунды, что просто обращается к свойствам непосредственного пользователя. Когда я добавляю цикл группы, он работает в среднем через 10 секунд, независимо от того, что у меня есть какая-либо обработка для каждой записи в цикле. Я еще не нашел, что такое магическое число для HTA, чтобы перейти в это не отвечающее состояние, когда процесс занимает больше времени, чем обычно, чтобы отчитываться, но если бы я мог получить этот запрос через 5 секунд, я думаю, что я был бы в хорошей форме , – ssaviers

ответ

0

приведенное ниже изменение кода имело резкое улучшение, когда перебирался через только именованный список по всему одному объекту группы. моя логика PowerShell вскочила и заставила меня здесь вместе с @Ansgar Wiechers подталкивать ее глубже тестировать. Благодаря!

Set objUser = GetObject("LDAP://" & strUserDN) 

arrGroup = objUser.MemberOf 
      strGroup = "" 
      For i = 0 To UBound(arrGroup) 
       strGroup = arrGroup(i) 

       If InStr(lcase(strGroup),"vpn user") Then 
        WScript.echo "block grp 1" 
       End If 
       If InStr(lcase(strGroup),"dl - some office") Then 
        WScript.echo "block grp 2" 
       End If 
       If InStr(lcase(strGroup),"encryption enabled") Then 
        WScript.echo "block grp 3" 
       End If 
       If InStr(LCase(strGroup), "wireless") Then 
        strWifi = True 
       End If 
      Next 
Смежные вопросы