2010-08-23 5 views
10

Trên dòng "If (IsNull (value)) thì" dưới đây là mã của tôi có đúng không? Tôi muốn kiểm tra xem khóa registry tồn tại và nếu không thì sẽ hiển thị một trang web.vbscript và kiểm tra 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 

Trả lời

5

Nếu RegRead ném lỗi, thì value không được khởi tạo; biến chưa được khởi tạo có giá trị Empty, không phải là Null. Vì vậy, bạn nên thêm dòng

value = Null 

sau khi tuyên bố Dim. Nếu không, IsNull sẽ luôn trả về False.

+0

Mấu chốt ở đây (không ý định chơi chữ) là RegRead [ném một lỗi] (http : //msdn.microsoft.com/en-us/library/x05fawxd%28v=vs.84%29.aspx) nếu khóa không tồn tại, và OP có 'On Error Resume Next' được bật. Ngoài ra, người ta có thể sử dụng 'IsEmpty (giá trị)' thay vì 'IsNull (giá trị)'. –

2

Bạn có nghĩa là 'Null' hoặc 'Nothing' không?

Trong VBScript, Không có nghĩa là không có giá trị (hoặc con trỏ rỗng). Null được sử dụng để biểu diễn các giá trị NULL từ một cơ sở dữ liệu.

Xem this link để biết thêm thông tin.

Ngoài ra, xem this example cho làm thế nào để phát hiện nếu một khóa registry tồn tại:

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

Đây là giải pháp của tôi cho một vấn đề kinh doanh. Họ muốn làm cho USB chỉ đọc để dữ liệu không thể đi lang thang trên ổ đĩa. Sau khi ping và kết nối với WMI, tôi phải xác định xem khóa đã tồn tại chưa và giá trị đã được đặt. Trên một vài nghìn máy tính.

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

Trong VBScript - nơi tất cả các biến là biến thể — biến có thể là một trong hai giá trị đặc biệt: EMPTY hoặc NULL. EMPTY được định nghĩa là một biến với giá trị chưa được khởi tạo, trong khi NULL là một biến không chứa dữ liệu hợp lệ.

Nếu bạn muốn kiểm tra xem biến cụ thể là 'giá trị' là null hoặc rỗng sau đó sử dụng sau câu lệnh if:

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