web-dev-qa-db-fra.com

vbscript et recherche de null

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
10
Steve Wood

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
6
san1deep2set3hi

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.

5
user128300

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
2
Kilanash

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
0
gWaldo