Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用VBScript枚举和删除注册表值_Vbscript_Outlook_Registry_Thin Client - Fatal编程技术网

无法使用VBScript枚举和删除注册表值

无法使用VBScript枚举和删除注册表值,vbscript,outlook,registry,thin-client,Vbscript,Outlook,Registry,Thin Client,对于存在以下项的每个应用程序,我需要遍历注册表: HKCU\Software\Microsoft\Office\15.0\[应用程序名称]\resilience\DisabledItems 这样我就可以删除存储在这里的任何值 我编写了下面的脚本,但所有这一切似乎都是通过键进行迭代,直到它到达Outlook,在这一点上它向我保证键不存在(即使它确实存在),然后脚本停止运行 '***********************************************' '------------

对于存在以下项的每个应用程序,我需要遍历注册表:

HKCU\Software\Microsoft\Office\15.0\
[应用程序名称]
\resilience\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
“************************************************************************”
“-------------------------------------加载项键”
'***********************************************'
副AddInKeys()
出错时继续下一步
strOfficePath=“Software\Microsoft\Office\15.0”
objReg.EnumKey conHKEY_当前_用户,strOfficePath,arrofficesubkey
对于arrOfficeSubKeys中的每个键
'检查我们的DisabledItems密钥是否存在
如果存在注册表(“HKCU\Software\Microsoft\Office\15.0\”&key&“\Resilience\DisabledItems\”),则
'如果是-枚举此键下的值。。。
objReg.EnumValues conHKEY_CURRENT_USER,strOfficePath&key&“\resilience\DisabledItems\”,arrKeyValues
对于arrKeyValues中的每个值
'删除键值,但仅当它不为空时(这将是默认值)
如果值为“”,则
objShell.RegDelete“HKCU\Software\Microsoft\Office\15.0\”&key&“\resilience\DisabledItems\”值
如果结束
下一个
如果结束
下一个
如果错误为0,则
strMessage=“错误:子-加载项键”
如果结束
端接头
'***********************************************'
“---用于检查注册表项是否存在的函数”
'***********************************************'
函数regExists(sKey)
出错时继续下一步
regExists=objShell.regrad(sKey)
如果Err.Number=0,则
regExists=True
其他的
regExists=False
错误号=0
如果结束
如果错误为0,则
strMessage=“错误:子注册表存在”
如果结束
端函数
一些背景:当我在我的开发机器上运行脚本时,它似乎工作得很好。它枚举所有键和值,并删除需要删除的键和值。然而,当我从瘦客户机(在登录脚本中部署脚本的地方)运行此操作时,我看到了上述行为

当我从测试用户(登录到瘦客户机)加载注册表配置单元时,我可以看到,除了要检查的键之外,还有更多的键,但出于某种原因,它在Outlook之后停止检查


我是否遗漏了某种错误,或者我误解了注册表的工作方式?

这是由于Citrix和Windows环境的设置方式造成的

通过Active Directory
User->Properties->Profile
从服务器调用登录脚本

上面我遇到问题的脚本是在机器上本地执行的,因此应用程序的注册表项都不存在,因为这些应用程序安装在服务器上

将我的代码添加到服务器托管的登录脚本后,它能够检测并删除所有必需的键值