Правильно ли указан мой код в строке «Если (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
Вы имеете в виду '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
Это мое решение бизнес-задачи. Они хотели сделать 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
Если RegRead выдает ошибку, то значение
не инициализируется; неинициализированная переменная имеет значение Empty
, а не Null
.
Поэтому вам следует добавить строку
value = Null
после оператора Dim
. В противном случае IsNull
всегда будет возвращать False
.