Невозможно перечислить и удалить значения реестра с помощью VBScript

Мне нужно перебрать реестр для каждого приложения, для которого существует следующий ключ:

HKCU\Software\Microsoft\Office\15.0\[НАЗВАНИЕ ПРИЛОЖЕНИЯ]\Resiliency\DisabledItems

Так что я могу удалить любые значения, хранящиеся здесь.

Я написал приведенный ниже сценарий, но все, что он, кажется, делает, это перебирает ключи, пока не достигнет Outlook, после чего он убеждает меня, что ключ не существует (хотя он определенно существует), а затем сценарий перестает работать.

'***********************************************'
'------------------------------------Add-In Keys'
'***********************************************'
Sub AddInKeys()
    On Error Resume Next

    strOfficePath = "Software\Microsoft\Office\15.0\"
    objReg.EnumKey conHKEY_CURRENT_USER, strOfficePath, arrOfficeSubKeys

    for Each key in arrOfficeSubKeys        
        ' Check if our DisabledItems key exists
        If regExists("HKCU\Software\Microsoft\Office\15.0\" & key & "\Resiliency\DisabledItems\") Then          
            ' If it does - enumerate the values under this key ...
            objReg.EnumValues conHKEY_CURRENT_USER, strOfficePath & key & "\Resiliency\DisabledItems\", arrKeyValues
            For Each value in arrKeyValues              
                ' Delete key VALUE, but only IF it is not blank (this will be the default value)
                If value <> "" Then
                    objShell.RegDelete "HKCU\Software\Microsoft\Office\15.0\" & key & "\Resiliency\DisabledItems\" & value
                End If
            Next
        End If
    Next    

    If Err <> 0 Then
        strMessage = "ERROR: Sub - Add-In Keys"
    End If
End Sub

'***********************************************'
'---Function to check existence of registry keys'
'***********************************************'
Function regExists(sKey)    
    ON ERROR RESUME NEXT

    regExists = objShell.RegRead(sKey)
    If Err.Number = 0 Then
        regExists = True
    Else
        regExists = False
        Err.Number = 0
    End If

    If Err <> 0 Then
        strMessage = "ERROR: Sub - regExists"
    End If
End Function

Некоторая предыстория: кажется, что скрипт работает отлично, когда я запускаю его на своей машине разработки. Он перечисляет все ключи и все значения и удаляет те, которые мне нужно удалить. Однако, когда я запускаю это с тонкого клиента (где сценарий будет развернут — в сценарии входа в систему), я вижу поведение, описанное выше.

Когда я загружаю ветку реестра от тестового пользователя (который зашел в тонкий клиент), я вижу, что помимо проверяемых есть еще много ключей, но почему-то он перестает проверять после Outlook.

Я пропустил какую-то ошибку или я неправильно понимаю, как работает реестр?


person Bassie    schedule 15.02.2016    source источник


Ответы (1)


Это произошло из-за того, как настроена наша среда Citrix и Windows.

Сценарий входа вызывается с сервера через Active Directory User -> Properties -> Profile

Приведенный выше сценарий, в котором у меня возникла проблема, выполнялся локально на компьютере, поэтому ни один из разделов реестра приложения не присутствовал, поскольку эти приложения установлены на сервере.

После добавления моего кода в сценарий входа на сервер он смог обнаружить и удалить все необходимые значения ключей.

person Bassie    schedule 17.02.2016