我有以下脚本使用硬编码值来检查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
但是如果我尝试将一些值作为变量传递,以使脚本更加灵活/有用,如下所示
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
objWMIService.ExecQuery(strWMIQuery)返回一个空值(虽然如果我回显查询它似乎匹配硬编码的版本字符串)
和objItem . 似乎也不喜欢被赋予变量使用
我使用以下命令从命令行调用脚本:
cscript perfmon-greater Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager FreeliststallsPersec 0
我正在尝试什么?有人有一个我可以参考的例子吗?
任何信息非常感谢
谢谢
2 回答
您的问题是
objWMIService.ExecQuery
将字符串视为一个参数 .你可以这样做:
你把变量放在三重引号中E.g
Execquery ("select * from cim_datafile where drive="""&driveletter&"""")
driveletter
是可变的