vbscript и проверка на наличие null

Правильно ли указан мой код в строке «Если (IsNull (значение)) тогда» ниже? Я хочу проверить, существует ли раздел реестра, а если нет, показать веб-страницу.

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
10
задан Steve Wood 23 August 2010 в 15:54
поделиться

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
3
ответ дан 3 December 2019 в 23:10
поделиться

Это мое решение бизнес-задачи. Они хотели сделать USB доступным только для чтения, чтобы данные не могли блуждать по флэш-накопителям. После проверки связи и подключения к 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
0
ответ дан 3 December 2019 в 23:10
поделиться

Если RegRead выдает ошибку, то значение не инициализируется; неинициализированная переменная имеет значение Empty, а не Null. Поэтому вам следует добавить строку

value = Null

после оператора Dim. В противном случае IsNull всегда будет возвращать False.

5
ответ дан 3 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: