vbscript и проверка на ноль - PullRequest
       4

vbscript и проверка на ноль

10 голосов
/ 23 августа 2010

В строке «If (IsNull (value)) then» ниже мой код правильный?Я хочу проверить, существует ли раздел реестра, а если нет, показать веб-страницу.

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

Ответы [ 4 ]

6 голосов
/ 11 апреля 2014

В VBScript, где все переменные являются вариантами, переменные могут принимать одно из двух специальных значений: EMPTY или NULL. EMPTY определяется как переменная с неинициализированным значением, тогда как NULL - это переменная, которая не содержит действительных данных.

Если вы хотите проверить, является ли переменная, а именно 'value', NULL или EMPTY, используйте следующую инструкцию if:

If IsNull(value)  Or  IsEmpty(value) Then
   '...do something
End If
5 голосов
/ 23 августа 2010

Если RegRead выдает ошибку, то value не инициализируется;неинициализированная переменная имеет значение Empty, а не Null.Следовательно, вы должны добавить строку

value = Null

после оператора Dim.В противном случае IsNull всегда будет возвращать False.

3 голосов
/ 23 августа 2010

Вы имеете в виду '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
0 голосов
/ 27 августа 2010

Это моё решение бизнес-проблемы. Они хотели сделать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...