DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リモートシャットダウン実行時にRPCサーバーを利用できませんと返される

環境/言語:[VB.NET 2003,NET Framework 1.1]
分類:[.NET]

http://dobon.net/vb/bbs/log3-2/1242.html#1249
の「WMIでリモートパソコンのシャットダウン」
を参考にして、サーバーからリモートパソコンを
シャットダウンするプログラムを作成しました。
ソースコードは下記のとおりです。
'---------------------------------------------
Public Function SHUTDOWN(ByVal i_Username As String, ByVal i_Password As String, ByVal i_MachineName As String)
'ユーザー特権を有効にするための設定を作成
Dim co As New System.Management.ConnectionOptions
co.Impersonation = System.Management.ImpersonationLevel.Impersonate
co.EnablePrivileges = True
'リモートコンピュータをシャットダウンするには次のようにする
co.Username = i_Username
co.Password = i_Password
'ManagementScopeを作成
Dim sc As New System.Management.ManagementScope( _
"\\" & i_MachineName & "\ROOT\CIMV2", co)
Try
'接続
sc.Connect()
Dim oq As New System.Management.ObjectQuery( _
"select * from Win32_OperatingSystem")
Dim mos As New System.Management.ManagementObjectSearcher(sc, oq)
'Shutdownメソッドを呼び出す
Dim mo As System.Management.ManagementObject
For Each mo In mos.Get()
'パラメータを指定
Dim inParams As System.Management.ManagementBaseObject = _
mo.GetMethodParameters("Win32Shutdown")
inParams("Flags") = 1
inParams("Reserved") = 0
'Win32Shutdownメソッドを呼び出す
Dim outParams As System.Management.ManagementBaseObject = _
mo.InvokeMethod("Win32Shutdown", inParams, Nothing)
Next mo
mos.Dispose()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "確認")
End Try
End Function
'---------------------------------------------
デバグしたところ、sc.Connect()のところで
エラーが発生し、
「RPC サーバーを利用できません。」と表示されます。
ping Ipアドレス で確認すると Lost=0 が返されます。
サーバー側(2000サーバSP2)はアクティブディレクトリを使用しています。
上記のどこかに不具合があるのでしょうか。
それとも、この関数に渡す値が誤ってるのでしょうか。
http://support.microsoft.com/kb/224370/ja
の「Windows での "RPC サーバーを利用できません"
のトラブルシューティング」を適用すればいいのでしょうか。
ご存知の方、よろしくお願いします。
> デバグしたところ、sc.Connect()のところで
> エラーが発生し、
> 「RPC サーバーを利用できません。」と表示されます。

  この問題、解決されたのでしょうか?

  因みに、最近この手の問い合わせが多いですが、全て
  セキュリティーに関わる問題。

  Windowsファイアウォール等の設定で、RPCサーバーの
  使用されているポートが閉じているからです。
  設定を変更し開ければ動作しますが、RPCサーバの場合
  他に悪用される(ウィルスとか)可能性が高いので、
  オススメでは無いのですが。

以上。
■No20075に返信(オショウさんの記事)
オショウさん返信ありがとうございます。

>>デバグしたところ、sc.Connect()のところで
>>エラーが発生し、
>>「RPC サーバーを利用できません。」と表示されます。
>
>   この問題、解決されたのでしょうか?
>
>   因みに、最近この手の問い合わせが多いですが、全て
>   セキュリティーに関わる問題。
>
>   Windowsファイアウォール等の設定で、RPCサーバーの
>   使用されているポートが閉じているからです。
>   設定を変更し開ければ動作しますが、RPCサーバの場合
>   他に悪用される(ウィルスとか)可能性が高いので、
>   オススメでは無いのですが。
>
> 以上。

まだ解決していません。
SHUTDOWNを含む含むソースをコンパイルしたexeファイルを
Windowのファイアウォールの例外に追加・チェックしてありますが
まだ不十分な点があるのかもしれませんね。
投稿前にもこの設定をしていました。私の記述漏れです。
「RPCサーバーの使用されているポートが閉じている」
とのご指摘にそっていろいろ調べて試してみます。
中間報告です。
知人より「ポート番号の仕組みと活用
ブロードバンドコンテンツを利用するための 」
(ディー・アート)という書籍を薦められたので
それを注文中です。

h.hayashi
■No20093に返信(h.hayashiさんの記事)
おおよそ2週間ぶりとなってしまいました。再度の中間報告です。
「ポート番号の仕組みと活用
ブロードバンドコンテンツを利用するための 」
が届きました。

h.hayashi
ポート番号についてある程度調べ、
「Windows ファイアウォ-ル」の「詳細設定」タブの「ローカルエリア接続」にて
「設定(T)」を開いて、IPアドレス・外部ポート番号・内部ポート番号を指定
しようと思い、いくつか試してみたのですがうまくいきませんでした。
このやり方でできるんでしょうか?
「ローカルエリア接続」のチェックをはずすことででリモートシャットダウンが
できるようにはなりましたが、ポート番号を指定したほうがいいような気が
しますが...
最悪、この方法で対処しようと思っています。

h.hayashi
■No20176に返信(h.hayashiさんの記事)
> ポート番号についてある程度調べ、
> 「Windows ファイアウォ-ル」の「詳細設定」タブの「ローカルエリア接続」にて
> 「設定(T)」を開いて、IPアドレス・外部ポート番号・内部ポート番号を指定
> しようと思い、いくつか試してみたのですがうまくいきませんでした。
> このやり方でできるんでしょうか?
> 「ローカルエリア接続」のチェックをはずすことででリモートシャットダウンが
> できるようにはなりましたが、ポート番号を指定したほうがいいような気が
> しますが...
> 最悪、この方法で対処しようと思っています。

  RPCポートがオープンな状態となってしまったので、ポート番号を
  指定しようがしまいが、セキュリティーレベルは、非常に低い状態
  です。

  よって、アプリだけの指定でいいのでは?

以上。
■No20075に返信(オショウさんの記事)
オショウさん返信ありがとうございます。

提示先にセキュリティレベルの低下について納得して頂き、
今回の方法(ポート番号の指定なし)で対処しようと思います。

これで解決済みとさせていただきます。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板