リモート マシンが起動してオンラインになったとき、またはオフラインになったときに発生するサブスクライブできる WMI イベントはありますか?
私のアプリケーションは、マシンの可用性を監視できる必要があり、理想的には、継続的なポーリングではなく、イベントを介して機能するものが必要です。
シャットダウンイベントのサブスクライブは理論的には可能です。「システム」イベントログの更新を取得するためにサブスクライブできます。Source="EventLog"およびEventID=6006からのイベントを探しています。このイベントには、次のメッセージが含まれています。
イベントログサービスが停止しました。
これは通常、シャットダウン時に書き込まれる最後のメッセージです。ちょっと待って!これをWMI経由で受信するのは問題がある可能性があります。なんで?WMIサービス自体がEventLogの前にシャットダウンしたため、Catch 22である可能性があります。監視しているサーバーでシャットダウン中に以前に発生した別のメッセージを探し、それを監視する可能性があります。
ブートアップイベントには、さらに厄介なキャッチ22のセットが含まれています。WMIイベントがどのように機能するかを少し考えてみてください。イベントを取得するには、DCOMを介してリモートWMIサーバーへの接続を開き、必要なイベントを示すWQLクエリを発行する必要があります。起動イベントを受信するには、イベントが発生する前に、上記の接続を開き、上記のクエリを発行することを「魔法のように」知っている必要があります。
数年前、ネットワーク監視アプリケーション用にリモートサーバーからイベントログエントリを収集するサービスを作成しました。リモートへのDCOM接続が失われ、再構築が必要になったときを検出するロジックだけが、首の大きな痛みでした。たまたま、これはリモートホストにpingを実行する大規模なシステムのコンポーネントであったため、DCOM接続をいつ再構築するかを知るためにその情報に依存することになりました。
これらのシステムは DHCP を使用していますか? システムがいつオンラインに戻ったかを確認するには、DHCP の更新を監視する方が簡単な場合があります。
通常、私の経験から、これはアクティブ(ポーリング/ping /あなたがそれを呼びたいものは何でも)で最もよく行われます
世論調査はどうですか?(一般的に、ほとんどの用途でポーリングが嫌いなことを共有しますが、これはおそらく良い解決策である場合です)
少なくとも、マシンのステータスが変更されたときに一連のサブスクライバーにイベントを発生させる、小さな軽量のポーリングプロセスを作成できます。
次に、より良い解決策を見つけた場合は、イベント用のインターフェイスがすでにあります。
Microsoft や他のサイトを熟読しても、WMI の「ブート」イベントに関する情報は得られません。ただし、このスレッドは、監視するサーバーのスタートアップ フォルダーに何かをインストールすることを提案しています。