2010.07.21 Wednesday | 03:40

  Windows2000からWindowsXPへ「net send」する為に DCOM設定していていろいろ遭遇 トラブル

毎度立ちふさがる Microsoft の壁

Net_send

そもそも、これがしたかっただけなのですが、XP の MSG コマンドは、Windows2000 には無いし、
どうも使い勝手が良く解りませんでした。

ただ、自分のPC では通常 Net Send する必要も無いので Messenger サービスを停止しているので、
Net Send するほうからサービスを起動するのに WSH の WshRemote( DCOM ) を使おうとすると
いろいろ壁が立ちふさがっていました。

まず、Windows XP では、WshRemote のインストールが Microsoft の問題でされていないと言う
事で、それをインストールする為に、wscript -regserver という隠しコマンドみたいなのを実
行しなくてはなりません。これでやっと登録されます。
HKEY_CLASSES_ROOT\CLSID\{6F201542-B482-11D2-A250-00104BD35090}
レジストリエディタでアクセスされる側としての設定

何故かレジストリを直接設定します。わりとここまでは技術者ならすぐ情報
を得る事ができますが、一般の人では無理でしょうから、なんか意図的とし
か思えない堅牢ぶりです。しかし、まだこれで終わりでは無かったのです。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings]
"Remote"="1"

呼び出す側の設定

今回は、Windows2000 から XP の呼び出しなので、すぐにこれはできるように
なったのですが、当然テストとして XP から Windows2000 へのテストもします。
すると、

エラー:	書き込みできません。
コード:	800A0046

と言うエラー。宛先を変えると違うエラーが出るし、相手側のレジストリを無効
にすると、イベントビュアーにエラーが出るので、通信は成立しているので権限
しかありません。ずっといろいろやっていたのですが、結論として、呼び出すほ
う(XP)の「ある」チェックボックスを ON にします。


それが以下です。

Dcom_setting

dcomcnfg を実行して、一番左のウインドウを表示させて、マイコンピュータで
右クリックしてプロパティを表示後順にダイアログを開けてチェックします。
これで双方から WshRemote( DCOM ) が実行可能となります。この設定はどうや
ら Windows2000 には無いようなのですが、実際のところは良く解りません。

また、Firewall が動いている場合はさらに、WshRemote で実行するアプリケーシ
ョンの登録が必要だと思いますが、Firewall が必要な環境でわざわざするような
内容では無いし、仮に必要だとしてもそれなりの技術者だろうから問題は無いでし
ょう。自分の環境ではここまでです。たぶん XP 同士でもこれでうまく行くと思い
ます(調べたかぎりでは Windows XP のお話だったので)。

あとは、Windows7 のテストですが、それは明日以降です。

実行したコードは以下のようになります。
(Microsoft のサンプルのまま)
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.vbs", "night")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2 
	WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
	Dim theError
	Set theError = RemoteScript.Error
	WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & _
	", Char: " & theError.Character & vbCrLf & _
	"Description: " & theError.Description
	WScript.Quit -1
End Sub

で、test.vbs はサービス起動です
Set WshShell = CreateObject( "WScript.Shell" )
WshShell.Run("sc start Messenger")

結局 DCOM が動く状態ならば、その OS に存在するコマンドで自分自身に
メッセージ送ってやれば、net send であろうが、msg であろうが関係無い
ですね。( Vista 以降 Messanger サービス無いみたいですし )

で、Windows7 で MSG コマンドを試してみました。ひどいもんです、デフォルトでは使えません


Windows7 : MSG コマンドを使えるようにするには
やたら壁かありますが、結構情報は少なめです。使う人もあまりいないから かもしれませんが、業務で使いたい場合、一括で設定したい場合もあるでし ょうから、その場合は、以下を参考にするといいと思います。 【Management】Msgコマンドを使用すると「セッション名の取得エラー5」 また、Microsoft では以下のようなページで該当レジストリエントリの設定 が必要であると記述されています。 手順 2: 仮想マシンをインストールして構成する さて、Windows7 で リモートスクリプトの実行 Windows7 でも、WshRemote はインストールされておらず、wscript -regserver が双方の PC で必要になります。後は XP と同じです。ただ、自分の環境では Windows Firewall は 停止しているので、もし動いている場合はグループポリシーの設定に関する記述をみつけて います。英文ですから、同じ場所を少し探しにくいですが、 「着信リモート管理の例外を許可する」だと思います WSH Running a remote script - PC Tools Community Forum