独自のPowerShell CmdLetsを使用して管理コマンドをC#Windowsサービスに送信する
-
04-07-2019 - |
質問
サービスを実行するC#Windowsアプリケーションがあります。 PowerShellを活用して、実行中のサービスを管理するためのコマンドライン管理インターフェイスを提供したいと思います。
私の観点から、Exchange 2007と同じ管理インターフェイスを提供しようとしています。
「接続」する順序で管理コマンドレットを開始/設計する方法に関する提案やサンプルコードはありますか?実行中のサービスに管理コマンドを照会または送信しますか?
powershellコマンドラインからサービスの内部ランタイム状態にアクセスするにはどうすればよいですか?たとえば、Get-ConnectionsInfoというコマンドレットを実装して、コマンドレットの実行時にWindowsサービスが使用しているアウトバウンド接続の数を確認します。
実用的な例または例へのWebリンクは歓迎以上です。
ありがとう、 ロバート
解決
ここで重要なのは、.NetからアクセスできるAPIを記述することから始めることです。その後、このAPIへの呼び出しを、PowerShellコマンドレットであるクラスを公開するDLLに簡単にラップできます。誰かがリモートでサービスを管理できるようにしたい場合、おそらくこれを行うWebサービスまたはWCFサービスのいずれかを作成し、それをPowerShellでラップすることが最善だと思います。 codeplexを見ると、GoGridやSQL Data ServicesなどのリモートWebベースのサービスを管理するサンプルがいくつかあります。これらのサンプルコードから開始できます。
他のヒント
解決策は、WindowsサービスがWCFを介して管理インターフェイスを公開することです。 PowerShellコマンドは、このWCFサービスを使用して情報を引き出し、Windowsサービスにアクションを実行させます。
Windowsサービスの内部状態を公開する別の方法が思い浮かびました。 PowerShellまたはPowerShellコマンドから使用できるWMIを介して情報を公開できます。
WMIを介してアクションを実行するようにサービスに指示できるかどうかはわかりませんが、少なくとも状態を引き出すことはできます。
3番目の選択肢は、Windowsサービスを PowerShellコンテンツプロバイダー。ただし、自分で作成したことはないので、Windowsサービスでのホスティングに適しているかどうかはわかりません。サービスが常に実行されているとは限らないからです。