SCOMで監視をしているとスクリプトのデバックをしたくなることがあります。実際に自分でスクリプトを動かしてみて動作を確認したり、直接スクリプトを参照して内部ロジックを確認したり…。
これを行うにはまず、該当のモニターのタイムアウトを1秒とかに設定してしまって、意図的にタイムアウトさせてしまい、その情報をイベントログに記録させてしまうのが一番早いです(おそらく)。
これでタイムアウトを短くしてしまえば、タイムアウトした時に、イベントログにタイムアウトしたスクリプト名やその時の引数等が記録されます。
あとはスクリプトファイルを捕まえてあげれば自由にデバッグできるようになります。
エージェント側で実際のスクリプトを確認します。
C:\Program Files\System Center Operations Manager\Agent\Health Service State
このディレクトリ以下に実際のスクリプト等が格納されているのでコマンドプロンプトにてサブディレクトリも含めてスクリプト検索を行います。ゲートウェイが存在している環境では別のディレクトリに格納されていると思います。
dir /b /s *.vbs
このようにスクリプト一覧が出力されますので、目的のスクリプトを確保することができます。
また、SCOMサーバー側でも管理パックをエクスポートすることで定義を確認する方法もあります。
SCOM PowerShellから以下のコマンドで管理パックをエクスポートして、中身に対してスクリプト名で検索をかけるとよいでしょう。
Get-SCOMManagementPack | Export-SCOMManagementPack -path c:\mp
たとえば、GetSQL2012DBFilesFreeSpace.vbsであれば以下のようになります。
目的のものが手に入ったら、あとは、コマンドプロンプトで実際にスクリプトに正しい引数を与えながらデバッグを実行することになります。スクリプトをコピーしてprintfデバッグをしてもよいですし、環境が許せばデバッグ実行をするのもよいでしょう。
vbscriptであればcscriptに//Xオプションをつけることでデバッグ実行ができます。もちろんその場合にはデバッガーが環境に入っていないといけません。
c:\tmp>cscript /? Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation. All rights reserved.
Usage: CScript scriptname.extension [option…] [arguments…]
Options: //B Batch mode: Suppresses script errors and prompts from displaying //D Enable Active Debugging //E:engine Use engine for executing script //H:CScript Changes the default script host to CScript.exe //H:WScript Changes the default script host to WScript.exe (default) //I Interactive mode (default, opposite of //B) //Job:xxxx Execute a WSF job //Logo Display logo (default) //Nologo Prevent logo display: No banner will be shown at execution time //S Save current command line options for this user //T:nn Time out in seconds: Maximum time a script is permitted to run //X Execute script in debugger //U Use Unicode for redirected I/O from the console