VBScript 和检查 Null 值

12

在我的代码中,以下这行 "If (IsNull(value)) then" 是否正确?我想要检查注册表键是否存在,如果不存在则显示一个网页。

Option Explicit
On error resume next
Dim SysVarReg, Value
Set SysVarReg = WScript.CreateObject("WScript.Shell")
value = SysVarReg.RegRead ("HKCU\Software\test\FirstLogonComplete")

If (IsNull(value)) then

    Set WshShell = WScript.CreateObject("WScript.Shell") 
    WshShell.Run "c:\Program Files\Internet Explorer\iexplore.exe https://intranet/start.htm"

    Dim SysVarReg2, Value2
    Value2 = "TRUE"
    Set SysVarReg2 = WScript.CreateObject("WScript.Shell")
    SysVarReg2.RegWrite "HKCU\Software\test\FirstLogonComplete", Value2

else
    wscript.echo "Already logged on"
end if
4个回答

8
在VBScript中,所有变量都是变体类型,变量可以是两个特殊值之一:EMPTY或NULL。EMPTY被定义为一个未初始化值的变量,而NULL是一个不包含有效数据的变量。
如果您想测试变量'value'是否为NULL或EMPTY,则使用以下if语句:
If IsNull(value)  Or  IsEmpty(value) Then
   '...do something
End If

6
如果RegRead抛出错误,那么“value”未初始化;未初始化的变量值是“Empty”,而不是“Null”。因此,应添加以下行:
value = Null

Dim语句之后进行赋值。否则,IsNull将始终返回False

这里的关键(无意冒犯)是,如果键不存在且 OP 已经打开了 On Error Resume Next,那么 RegRead 会抛出一个错误。或者,可以使用 IsEmpty(value) 替代 IsNull(value) - Cheran Shunmugavel

3

您是指“Null”还是“Nothing”?

在VBScript中,Nothing表示缺少值(或空指针)。 Null用于表示来自数据库的NULL值。

有关更多信息,请参见此链接

此外,查看此示例以了解如何检测注册表键是否存在:

Const HKLM = &H80000002
Set oReg =GetObject("Winmgmts:root\default:StdRegProv")

sKeyPath = "Software\Microsoft\Windows\CurrentVersion"
If RegValueExists(HKLM, sKeyPath, sValue) Then
  WScript.Echo "Value exists"
Else
  WScript.Echo "Value does not exist"
End If

Function RegValueExists(sHive, sRegKey, sRegValue)
  Dim aValueNames, aValueTypes
  RegValueExists = False
  If oReg.EnumValues(sHive, sKeyPath, aValueNames, aValueTypes) = 0 Then
    If IsArray(aValueNames) Then
      For i = 0 To UBound(aValueNames)
        If LCase(aValueNames(i)) = LCase(sRegValue) Then
          RegValueExists = True
        End If
      Next
    End If
  End If
End Function

0
这是我针对一个业务问题提出的解决方案。他们希望将USB设为只读,以防止数据在U盘上流失。在进行ping和连接到WMI之后,我必须确定该键是否已经存在并且值已设置。这需要在几千台计算机上完成。
keyExists = fnReadKeyValue()

'======================================
'======================================


Function fnReadKeyValue()
    '   ' EXAMPLE VALUES
    '   const HKEY_LOCAL_MACHINE = &H80000002
    '   strComputer = "."
    '   strKeyPath = "SYSTEM\CurrentControlSet\Control\StorageDevicePolicies"
    '   strEntryName = "WriteProtect"

    Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
        strComputer & "\root\default:StdRegProv")

    objReg.GetDWordValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue
    if IsNull(strValue) then
        objLogFile.WriteLine "That registry value doesn't exist."
        fnReadKeyValue = "FAIL"
    else
        fnReadKeyValue = strValue
    end if

End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接