Sur la ligne "Si (IsNull (valeur)), alors" mon code est-il correct? Je veux vérifier si la clé de registre existe et sinon afficher une page Web.
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
Dans VBScript, où toutes les variables sont des variantes, les variables peuvent être l'une des deux valeurs spéciales: EMPTY ou NULL. EMPTY est défini comme une variable avec une valeur non initialisée, alors que NULL est une variable qui ne contient aucune donnée valide.
Si vous voulez vérifier si la variable, à savoir 'valeur', est NULL ou EMPTY, utilisez ensuite l'instruction if:
If IsNull(value) Or IsEmpty(value) Then
'...do something
End If
Si RegRead génère une erreur, alors value
n'est pas initialisé; une variable non initialisée a la valeur Empty
, pas Null
. Par conséquent, vous devez ajouter la ligne
value = Null
après la déclaration Dim
. Sinon, IsNull
renverrait toujours False
.
Voulez-vous dire «nul» ou «rien»?
Dans VBScript, Nothing signifie absence de valeur (ou pointeur null). Null est utilisé pour représenter les valeurs NULL d'une base de données.
Voir ce lien pour plus d'informations.
Voir aussi cet exemple pour savoir comment détecter si une clé de registre existe:
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
C'est ma solution à un problème commercial. Ils voulaient que la clé USB soit en lecture seule afin que les données ne puissent pas disparaître sur les clés USB. Après un ping et une connexion à WMI, je devais déterminer si la clé existait déjà et si la valeur était définie. Sur quelques milliers d'ordinateurs.
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