2010-08-23 5 views
10

Sur la ligne "If (IsNull (valeur)) alors" est-ce que mon code est correct? Je veux vérifier si la clé de registre existe et sinon afficher une page Web.vbscript et recherche de null

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 

Répondre

5

Si RegRead renvoie une erreur, alors value n'est pas initialisé; une variable non initialisée a la valeur Empty, et non Null. Par conséquent, vous devez ajouter la ligne

value = Null 

après la déclaration Dim. Sinon, IsNull retournera toujours False.

+0

La clé ici (sans jeu de mots) est que RegRead [renvoie une erreur] (http : //msdn.microsoft.com/en-us/library/x05fawxd%28v=vs.84%29.aspx) si la clé n'existe pas et que l'OP a activé la fonction On Error Resume Next. Alternativement, on pourrait utiliser 'IsEmpty (value)' au lieu de 'IsNull (value)'. –

2

Voulez-vous dire 'Null' ou 'Nothing'? En VBScript, rien ne signifie l'absence de valeur (ou un pointeur nul). Null est utilisé pour représenter les valeurs NULL d'une base de données.

Voir this link pour plus d'informations.

Aussi, voir this example 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 
0

Ceci est ma solution à un problème commercial. Ils voulaient que l'USB soit en lecture seule pour que les données ne puissent pas s'égarer sur les clés USB. Après le ping et la connexion à WMI, j'ai dû déterminer si la clé existait déjà et si la valeur avait été 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 
4

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 videz puis utilisez suivant instruction if:

If IsNull(value) Or IsEmpty(value) Then 
    '...do something 
End If