1

ハードコーディングされた値を使用して SQL perfmon カウンターをチェックする次のスクリプトがあります。

    Dim objWMIService
    Dim colItems
    Dim objItem
    Dim objProperty

    strComputer = "."

    Set 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)
    終了条件

    次

しかし、以下に示すように、スクリプトをより柔軟/便利にするために、いくつかの値を変数として渡そうとすると

    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"

    colItems = objWMIService.ExecQuery(strWMIQuery) を設定します。

    colItems の各 objItem

    If objItem.& strPerfCounter > & intCritValue Then
        Wscript.Echo "サービス ステータス: 重大"
        Wscript.Quit(2)
    そうしないと
        Wscript.Echo "サービス ステータス: OK"
        Wscript.Quit(0)
    終了条件
    次

objWMIService.ExecQuery(strWMIQuery) は null 値を返します (ただし、クエリをエコーすると、ハードコードされたバージョン文字列と一致するようです)

そしてobjItem。また、使用する変数が与えられるのが好きではないようです

以下を使用して、コマンド ラインからスクリプトを呼び出します。

cscript perfmon-greater Win32_PerfFormattedData_MSSQLSERVER_SQLServerBufferManager FreeliststallsPersec 0

私が試みていることは可能ですか?誰かが私が参照できる例を持っていますか?

どんな情報でも大歓迎です

ありがとう

4

2 に答える 2

2

問題はobjWMIService.ExecQuery、文字列を 1 つのパラメーターとして認識していることです。

あなたはこれを行うことができます:

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 に答える