ハードコーディングされた値を使用して 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
私が試みていることは可能ですか?誰かが私が参照できる例を持っていますか?
どんな情報でも大歓迎です
ありがとう