Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Variables 在vbs WMI方法中使用变量_Variables_Vbscript_Wmi - Fatal编程技术网

Variables 在vbs WMI方法中使用变量

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

我有以下脚本,它使用硬编码的值来检查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 我正在尝试的是可能的吗?有没有人能举个我可以参考的例子

非常感谢任何信息


谢谢

您的问题是
objWMIService。ExecQuery
将字符串视为一个参数

您可以这样做:

strWMIQuery = "SELECT * FROM " & strPerfCounterQuery
strWMILang = "WQL"
strWMIFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly

Set colItems = objWMIService.ExecQuery(strWMIQuery, strWMILang, strWMIFlags)

将变量放在三个引号中 例如
Execquery(“从cim_数据文件中选择*,其中驱动器为“””&driveletter&“”)

driveletter
是变量