1

我有以下脚本,它使用硬编码值来检查 SQL 性能计数器

    暗淡 objWMIService
    暗淡 colItems
    暗淡 objItem
    暗淡 objProperty

    strComputer =“。”

    设置 objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

    设置 colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

    对于 colItems 中的每个 objItem

    如果 objItem.FreeliststallsPersec > 0 那么
        Wscript.Echo“服务状态:严重”
        Wscript.Quit(2)
    别的
        Wscript.Echo "服务状态:OK"
        Wscript.Quit(0)
    万一

    下一个

但是如果我尝试将一些值作为变量传递以使脚本更加灵活/有用,如下所示

    暗淡 objWMIService
    暗淡 colItems
    暗淡 objItem
    暗淡 objProperty
    暗淡 strPerfCounterQuery
    暗淡 strPerfCounter
    暗淡intWarnValue
    暗淡intCritValue
    暗淡 strWMIQuery

    strComputer =“。”

    strPerfCounterQuery = Wscript.Arguments.Item(0)
    strPerfCounter = Wscript.Arguments.Item(1)
    intCritValue = Wscript.Arguments.Item(2)

    设置 objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

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

    设置 colItems = objWMIService.ExecQuery(strWMIQuery)

    对于 colItems 中的每个 objItem

    如果 objItem.& strPerfCounter > & intCritValue Then
        Wscript.Echo“服务状态:严重”
        Wscript.Quit(2)
    别的
        Wscript.Echo "服务状态:OK"
        Wscript.Quit(0)
    万一
    下一个

objWMIService.ExecQuery(strWMIQuery) 返回一个空值(尽管如果我回显查询,它似乎与硬编码的版本字符串匹配)

和 objItem。似乎也不喜欢被赋予一个变量来使用

我使用以下命令从命令行调用脚本:

cscript perfmon-greater Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager FreeliststallsPersec 0

我正在尝试的可能吗?有人有我可以参考的例子吗?

非常感谢任何信息

谢谢

4

2 回答 2

2

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

你可以这样做:

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

Set colItems = objWMIService.ExecQuery(strWMIQuery, strWMILang, strWMIFlags)
于 2013-03-13T17:42:37.747 回答
0

您将变量放在三引号中,例如 Execquery ("select * from cim_datafile where drive="""&driveletter&"""")

driveletter是变量

于 2016-03-27T10:14:47.743 回答