Variables 在vbs WMI方法中使用变量
我有以下脚本,它使用硬编码的值来检查SQL perfmon计数器 Dim objWMIService Dim colItems Dim objItem Dim objProperty strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objItem in colItems If objItem.FreeliststallsPersec > 0 Then Wscript.Echo "SERVICE STATUS: Critical" Wscript.Quit(2) Else Wscript.Echo "SERVICE STATUS: OK" Wscript.Quit(0) End If Next 暗淡的物体 暗结肠 暗淡的长方形 模糊对象属性 strComputer=“” 设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\CIMV2”) 设置colItems=objWMIService.ExecQuery(“从Win32\u performatteddata\u MSSQLSERVER\u SQLServerBufferManager中选择*,“WQL”,wbemFlagReturn立即+wbemFlagForwardOnly) 对于每个对象,在colitem中 如果objItem.FreeliststallsPersec>0,则 Echo“服务状态:关键” Wscript.Quit(2) 其他的 Echo“服务状态:正常” Wscript.Quit(0) 如果结束 下一个 但是如果我尝试将一些值作为变量传递,以使脚本更灵活/更有用,如下所示 Dim objWMIService Dim colItems Dim objItem Dim objProperty Dim strPerfCounterQuery Dim strPerfCounter Dim intWarnValue Dim intCritValue Dim strWMIQuery strComputer = "." strPerfCounterQuery = Wscript.Arguments.Item(0) strPerfCounter = Wscript.Arguments.Item(1) intCritValue = Wscript.Arguments.Item(2) Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") strWMIQuery = """SELECT * FROM " & strPerfCounterQuery & """" & ", " & """WQL""" & ", " & "wbemFlagReturnImmediately + wbemFlagForwardOnly" Set colItems = objWMIService.ExecQuery(strWMIQuery) For Each objItem in colItems If objItem.& strPerfCounter > & intCritValue Then Wscript.Echo "SERVICE STATUS: Critical" Wscript.Quit(2) Else Wscript.Echo "SERVICE STATUS: OK" Wscript.Quit(0) End If Next 暗淡的物体 暗结肠 暗淡的长方形 模糊对象属性 Dim strperf计数器查询 暗色strperf计数器 暗值 微积分 Dim strWMIQuery strComputer=“” strPerfCounterQuery=Wscript.Arguments.Item(0) strPerfCounter=Wscript.Arguments.Item(1) intCritValue=Wscript.Arguments.Item(2) 设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\CIMV2”) strWMIQuery=“”从“&strPerfCounterQuery&”、“&”、“&”、“&”WQL“、“&”wbemFlagReturn立即+wbemFlagForwardOnly”中选择* Set colItems=objWMIService.ExecQuery(strWMIQuery) 对于每个对象,在colitem中 如果objItem&strPerfCounter>&intCritValue,则 Echo“服务状态:关键” Wscript.Quit(2) 其他的 Echo“服务状态:正常” Wscript.Quit(0) 如果结束 下一个 ExecQuery(strWMIQuery)返回一个空值(尽管如果我回显查询,它似乎与硬编码的版本字符串匹配) 还有奥比提姆。似乎也不喜欢被赋予一个变量来使用 我使用以下命令行调用脚本: cscript perfmon-greater Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager FreeliststallsPersec 0 cscript perfmon更大的Win32_performatteddata_MSSQLSERVER_SQLServerBufferManager FreeliststallsPersec 0 我正在尝试的是可能的吗?有没有人能举个我可以参考的例子 非常感谢任何信息Variables 在vbs WMI方法中使用变量,variables,vbscript,wmi,Variables,Vbscript,Wmi,我有以下脚本,它使用硬编码的值来检查SQL perfmon计数器 Dim objWMIService Dim colItems Dim objItem Dim objProperty strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuer
谢谢您的问题是
objWMIService。ExecQuery
将字符串视为一个参数
您可以这样做:
strWMIQuery = "SELECT * FROM " & strPerfCounterQuery
strWMILang = "WQL"
strWMIFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly
Set colItems = objWMIService.ExecQuery(strWMIQuery, strWMILang, strWMIFlags)
将变量放在三个引号中 例如
Execquery(“从cim_数据文件中选择*,其中驱动器为“””&driveletter&“”)
driveletter
是变量