Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 使用ChassisType选择案例的多个条件_Vbscript_Case_Computer Name_Mdt - Fatal编程技术网

Vbscript 使用ChassisType选择案例的多个条件

Vbscript 使用ChassisType选择案例的多个条件,vbscript,case,computer-name,mdt,Vbscript,Case,Computer Name,Mdt,我们在环境中使用MDT对计算机进行映像。我们使用脚本根据IP位置命名计算机,然后脚本将数据写入数据库。我需要修改脚本以包含一部分附加条件来构造计算机名。我对下面脚本中使用机箱类型附加条件的部分有困难 我需要帮助的部分是 Case (InStr(1, strIP, ".111.")>0),(strChassisType = 8,9 Or 10) strSiteCode="UKL" Case (InStr(1, strIP, ".112.")>0),(strChassisType =

我们在环境中使用MDT对计算机进行映像。我们使用脚本根据IP位置命名计算机,然后脚本将数据写入数据库。我需要修改脚本以包含一部分附加条件来构造计算机名。我对下面脚本中使用机箱类型附加条件的部分有困难

我需要帮助的部分是

Case (InStr(1, strIP, ".111.")>0),(strChassisType = 8,9 Or 10)
  strSiteCode="UKL"
Case (InStr(1, strIP, ".112.")>0),(strChassisType = 8,9 Or 10)
  strSiteCode="NYL"
Case (InStr(1, strIP, ".113.")>0),(strChassisType = 8,9 Or 10)
  strSiteCode="HKL"
我想让这三个条件起作用,并根据站点条件设置站点代码,然后再根据机箱类型设置站点代码,但我不确定如何使用多个条件,或者如何组合机箱类型,并希望获得指导

以下是完整的脚本

Function UserExit(sType, sWhen, sDetail, bSkip)
  oLogging.CreateEntry "entered UserExit ", LogTypeInfo
  UserExit = Success
End Function

Function computerName()
  'On Error Resume Next
  Dim strSerial,strAsset, strManufacturer, strIP, strSiteCode
  Set WshNetwork = WScript.CreateObject("WScript.Network")
  Set WSHShell = CreateObject("WScript.Shell")

  '----Establish SQL Connection----
  Set objConnection = CreateObject("ADODB.Connection")
  objConnection.Open "Provider=sqloledb;Data Source=XXXXXXXX;Initial Catalog=NetMetrics;User Id=netmetrics;Password=*********;"

  '----Determine local Service & Asset Tags----
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

  Set colSMBIOS = objWMIService.ExecQuery _
    ("Select * from Win32_SystemEnclosure")

  For Each objSMBIOS In colSMBIOS
    strManufacturer = objSMBIOS.Manufacturer
    strSerial = objSMBIOS.SerialNumber
Next

  '----Determine Site Code based upon IP address----
  Set IPConfigSet = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

  For Each IPConfig In IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then 
      For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
        strIP = strIP + IPConfig.IPAddress(i)
      Next
    End If
  Next

  Set colChassis = objWMIService.ExecQuery _
    ("Select * from Win32_SystemEnclosure")

  For Each objChassis in colChassis
    For Each strChassisType in objChassis.ChassisTypes
      Select Case strChassisType
        Select Case True
          Case (InStr(1, strIP, ".111.")>0)
            strSiteCode = "UK"
          Case (InStr(1, strIP, ".112.")>0)
            strSiteCode = "NY"
          Case (InStr(1, strIP, ".113.")>0)
            strSiteCode = "HK"
          Case (InStr(1, strIP, ".111.")>0),(strChassisType = 8,9 Or 10)
            strSiteCode = "UKL"
          Case (InStr(1, strIP, ".112.")>0),(strChassisType = 8,9 Or 10)
            strSiteCode = "NYL"
          Case (InStr(1, strIP, ".113.")>0),(strChassisType = 8,9 Or 10)
            strSiteCode = "HKL"
        End Select

  If (inStr(1,strManufacturer,"Dell")) Then
    strSQLQuery = "select count(*) from AssetTags where ServiceTag='" & strSerial & "'"
    priorEntry = objConnection.Execute(strSQLQuery)
    If priorEntry(0) = 0 Then
      strSQLQuery = "select right(concat('00',right(max(assettag),3)+1),3) from AssetTags where AssetTag like '" & strSiteCode & "[^S]%'"
      Set arrNewTag = objConnection.Execute(strSQLQuery)
      strSQLQuery = "INSERT INTO AssetTags Values ('" & strSerial & "','"& strSiteCode & arrNewTag(0) & "', 'New')"
      objConnection.Execute(strSQLQuery)
      computerName=(strSiteCode & arrNewTag(0))
    Else
      strSQLQuery = "select assettag from AssetTags where ServiceTag='" & strSerial & "'"
      Set arrNewTag = objConnection.Execute(strSQLQuery)
      computerName=(arrNewTag(0))
    End If
  Else
    computerName = "Set Computer Name"
  End If

  objConnection.Close
End Function

如果要在
Case
语句中使用多个条件,则需要使用逻辑运算符连接它们,除非要匹配其中任何一个条件(逗号表示有一个包含多个独立条件的列表)

声明

Select Case True
  Case x=1, y=2
    ...
End Select
Select Case True
  Case x=1 And y=2
    ...
End Select
如果
x
的值为1或
y
的值为2,则匹配

声明

Select Case True
  Case x=1, y=2
    ...
End Select
Select Case True
  Case x=1 And y=2
    ...
End Select
仅当
x
的值为1且
y
的值为2时匹配

但是,我个人认为这是滥用<代码>选择< /COD>语句,因为它们通常是根据一个变量或表达式的不同值来分支的。

Select Case x
  Case 1
    'do some
  Case 2
    'do other
  Case Else
    'didn't expect this value
End Select
我更喜欢检查多个不同条件的
If..ElseIf..Else
语句

If x=1 And y=3 Then
  ...
ElseIf x=2 And y<5 Then
  ...
ElseIf y>2 And z-x=4 Then
  ...
Else
  ...
End If

如果您的值是数值,则可以使用如下比较操作:

If strChassisType >= 8 And strChassisType <= 10 Then
或者定义一个
Contains
函数来检查数组中是否存在值:

Function Contains(a, v)
  Contains = False
  For Each e In a
    If e = v Then
      Contains = True
      Exit For
    End If
  Next
End Function
...
If Contains(Array("8", "9", "10"), strChassisType) Then
因为第二组条件基本上只是修改第一组条件的结果,所以我可能会这样做:修改第一组条件的结果。也可以使用
Split(strIP,“.”
从IP地址拆分相关子网

subnet = Split(strIP, ".")(2)
For Each objChassis In colChassis
  For Each strChassisType In objChassis.ChassisTypes
    Select Case subnet
      Case "111": strSiteCode = "UK"
      Case "112": strSiteCode = "NY"
      Case "113": strSiteCode = "HK"
      Case Else
        WScript.Echo "Unknown subnet: " & subnet
        WScript.Quit 1
    End Select

    If strChassisType >= 8 And strChassisType <= 10 Then
      strSiteCode = strSiteCode & "L"
    End If
  Next
Next
子网=拆分(条带“.”(2)
对于colChassis中的每个对象
对于objChassis.ChassisTypes中的每个strChassisType
选择案例子网
案例“111”:strstecode=“英国”
案例“112”:strstecode=“NY”
案例“113”:strstecode=“HK”
其他情况
Echo“未知子网:”&子网
WScript.Quit 1
结束选择

如果strChassisType>=8且strChassisType欢迎使用StackOverflow。您似乎没有指定代码有什么问题,出现了什么错误,或者预期的结果是什么。这将使你的问题不太可能得到高质量的答案。我想我很清楚,我有一个困难的时间与多种条件的底盘类型。我不知道如何正确地组合它们。脚本没有返回结果,这是一个“预期”错误。这是一个很棒的问题分解和解释。这非常棒,不仅让我有了解决方案,而且让我了解了找到解决方案的过程,以及我最初尝试时的错误。非常感谢。