• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シャットダウンスクリプトの記述)

ワークグループ環境の Windows Server 2003で複数台のマシンに ping を打ち、応答が返ってきた場合にシャットダウンするスクリプトの記述方法

このQ&Aのポイント
  • ワークグループ環境の Windows Server 2003 では、参加していない WinXP クライアントから複数のマシンに ping を実行し、応答があった場合にシャットダウンするスクリプトを記述したいと考えています。
  • 現在、2つの処理で問題が発生しています。1つ目は、vbs スクリプトを実行するとエラーダイアログが表示される問題です。もう1つの問題は、シャットダウンの開始がされないことです。
  • 2つの問題について、別の資格情報を使用して接続できるコードとシャットダウンが実行されるコードを教えていただきたいです。また、サーバーの IPC$ に接続してから処理を試行したところ、シャットダウンが進まなかったことも報告しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MapNetworkDrive はファイル共有サービスだから RPC とは別では? win32shutdown rpc ファイアウォール あたりのキーワードで検索してみてはどうでしょう。

yamadadennki
質問者

お礼

ありがとうございます。 135 はさすがに許可されている気がしますが、RPC サービスポートは確かにふさがれてる可能性はありそうです。 設定を確認してみます。

yamadadennki
質問者

補足

試したところ、サーバーの FW を無効にしても回避せず、また、WMI コマンドでも同一のエラーが表示されたことから、経路上で RPC サービスポートで使用される可能性のあるポートがシャットダウンされている可能性が高そうです。 そのため、この方法はあきらめることとなりました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

ファイアーウォールとか。

yamadadennki
質問者

お礼

ありがとうございます。 ただ、FW だとすると、.MapNetworkDrive でもサーバーに接続することはできないのではないかと考えられます。 RPC で最初に接続するので TCP135 を確認する、ということを示唆されていらっしゃいますでしょうか。FW である場合、どこのポートを確認すればよいでしょうか (本当はパケットを採取できれば FW の影響かどうかはわかりますが、アプリをインストールできないので質問させていただいています)。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 下記内容のスクリプトを実行すると、ポップアップが

    下記内容のスクリプトを実行すると、ポップアップが 5回表示されるのですが、どこから取ってきた値なのか知りたいです。 ※必要なのは4回目に表示されるデスクトッププロパティから  参照できる”スクリーンセーバーの待ち時間”だけです。  出来れば、それのみ表示させたいです。 ****************** On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop") For Each objItem in colItems Wscript.Echo "ScreenSaverTimeout: " & objItem.ScreenSaverTimeout Next ****************** 以上

  • WSH/VBScript DHCPの有効設定について

    お世話になっております。 毎度お手数をお掛けしていますが、よろしくお願いいたします。 WSHにてDHCPの有効設定を行ったところ、 WindowsVistaで以下の通り実行すると DHCPは有効になりますが、Staticで設定していたデフォルトゲートウェイのアドレスが残ってしまいます。 WindowsXPで実行するとデフォルトゲートウェイのアドレスは削除されます。 デフォルトゲートウェイの値を削除する方法をお願いいたします。 '----------------------------------- strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\"" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery(_ "SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'" For Each objItem in colItems if objItem.EnableDHCP = False then Return = objItem.EnableDHCP end if Next '----------------------------------- 上記に以下を追加してみましたが正常に動作しませんでした。 arrGateways = Array(Null) objItem.SetGateways(arrGateways) 以上、よろしくお願いいたします。

  • WSHについて教えてください。

    WSHについて教えてください。 コレクションの最初の要素(オブジェクト)のプロパティを参照したいのですが、やり方がわかりません。 例えば以下のようなWMIのクエリの結果のコレクションの要素(オブジェクト)は1つだけしかありません。 ※ネットワークドライブ V: の情報を得る strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection where LocalName=""V:""",,48) なのにわざわざ For Each objItem in colItems Wscript.Echo "LocalName: " & objItem.LocalName Next のような表現をするのは、いかにも大変です。 For Eachを使わずに、上記の例での colItems の最初の要素(オブジェクト)の LocalName プロパティを取り出すには どのようにコーディングすればいいのでしょうか?

  • スクリプト:特権を保有していません

    Const wshYes = 6 Const wshNo = 7 Const wshYesNoDialog = 4 Const wshQuestionMark = 32 Set objShell = CreateObject("Wscript.Shell") intReturn = objShell.Popup("再起動処理キャンセルしますか?(60秒以内)", _ 60, "再起動処理開始", wshYesNoDialog + wshQuestionMark) If intReturn = wshYes Then Wscript.Echo "再起動処理をキャンセルしました" ElseIf intReturn = wshNo Then Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "再起動処理を実行しています。" Else Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "タイムアウトです。再起動処理を実行しています。" End If とスクリプトをいただきましたが、特権を保有していません。コード 80041062 が表示されてしまいます。あいにく、ど素人のため特権を付与してあげる方法がわかりません。もしお分かりになるか いらっしゃいましたら、ご教示をお願いいたします。

  • VBScript(WHS)でWMIを使ってリモートでvbsファイルを実行したい

    サーバAから、サーバBに置いてあるvbsファイル(Apache停止が書かれている)を実行して、サーバBのApacheを停止したいのですが、うまくいきません。 サーバBで単体でそのvbsファイルを実行すると、Apacheは正常に停止します。  戻り値は、0(プロセス完了)が帰ってきていて、接続はうまくいっているようなのですが、vbsファイルが実行されていないようです。  非常に困っておりまして、どなたか教えていただけないでしょうか? vbsファイルの実行のところが間違っているのかなと思うのですが・・・(今まだ会社にいないので、会社でのソースそのままではないですが、同じような感じです) -------------------------------------------- Option Explicit Dim strComputer Dim strUser Dim strPassword Dim strBAT ' ----------------------------------- ' 環境設定 ' ----------------------------------- strComputer = "サーバーB" strUser = "username" strPassword = "password" strBAT = "c:\hoge.bat" ' ----------------------------------- ' コマンド実行 ' ----------------------------------- Dim objWbemLocator Dim objWMIService Dim objWin32_Process Dim errReturn Dim intProcessID Const WbemAuthenticationLevelPktPrivacy = 6 ' リモートに接続 Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer _ (strComputer, "root\cimv2", strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy ' Win32_Process クラスを生成 Set objWin32_Process = objWMIService.Get("Win32_Process") errReturn = objWin32_Process.Create _ ("cmd.exe /cscript C:\tmp\ApacheStop.vbs", Null, Null, intProcessID) WScript.Quit(errReturn ) もともとの要件は、機能ごとに分けたvbsファイル(Apache停止、Windows再起動、ファイルバックアップなど)を、各サーバで実行するというものです。その制御は、ひとつのバックアップサーバーで行います。

  • プリンタ一覧の取得

    お世話になります。 ネットワーク上の他クライアントのプリンタ一覧を取得する方法を探しています。 環境はWin2000です。 クライアントAから、クライアントBにログオンしているユーザー2のプリンタ一覧を取得する方法はあるのでしょうか。 strComputer ="クライアントB" Set objWMIService = GetObject( "winmgmts://" & strComputer & "/root/cimv2" ) Set PrtSet = objWMIService.ExecQuery("Select * From Win32_Printer") For Each Prt In PrtSet MsgBox Prt.Caption Next 上記、クライアントAにログオンしているユーザー1で実行したところクライアントBのユーザー1プロファイルのプリンタ一覧を取得してしまい、ユーザー2のプリンタ一覧を取得してくれません。 なにか情報、方法ありましたらご教授ください。 よろしくお願いします。

  • vbsでDNSサフィックスの変更をするには

    今、WMIのメソッドを使用して DNSサフィックスを変更するVBSを作成しているのですが なぜか「行10、文字3が無効なメソッドです」って エラーになってしまいます。 運用の環境なので変にランタイムなども入れられないため VBSを選択し、IP変更やコンピュータ名変更なんかは できたのですが、DNSサフィックスがどうしてもうまくいきません。 メソッドもwbemtest.exeにて調べたので無いことも無いと 思うのですが。。。 どなたかわかる方いらっしゃいましたら 教えていただけないでしょうか。お願いします。 **ここからがソースです**** strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNIC = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled=true") arrDNSSuffixes = Array("domain1.local", "domain2.local") For each objNIC in colNIC objNIC.SetDNSSuffixSearchOrder(arrDNSSuffixes) NEXT **ここまでがソースです****

  • エクセルVBAでPCシャットダウン

    ネットを検索してたら、PCをシャットダウンさせるというコード Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next をみつけたので以下のように試してみました。 Sub TEST() Application.OnTime Now + TimeValue("0:05:00"), "PC_ShutDown" End Sub Sub PC_ShutDown() Set objSystemSet = _ GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _ .InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next End Sub ところが実行すると、ログオフし、画面に、「コンピュータの電源を切ることができます」と表示されるのですが、そこでとまってしまいます。 PCの電源ボタンも長押しないときかなくなります。 自動で電源は切れないのでしょうか?

  • 任意のプログラムを終了させてからシャットダウンプログラムを走らせるには?

    すいませんが、質問させていただきます。 現在Windows XPにて他のサイトにあった「poweroff.vbs」 --------- Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 8 Next) --------- を、使用しタスクで自動シャットダウンをしていますが、 シャットダウンをさせるより先に任意のプログラム(.exe)を終了させてから上記の「poweroff.vbs」を実行するにはどうしたらいいでしょうか? このプログラムに何か記述を追加すれば良いのか、そのほかの方法があるのか、わかりません。ご回答をお願い致します。 因みに私はプログラムに関しては無知なので、わかりやすくお願い致します。

  • VBSについて教えてください。

    VBSについて教えてください。 イベントビューワのプロパティの変更(最大ログサイズとログサイズが最大値に達した時の操作)を以下のスクリプトにて変更したいと思っています。(スクリプトはhttp://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb16.mspxで公開されているのを利用しています。) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate,(Security)}!\\" & _ strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For each objLogfile in colLogFiles strLogFileName = objLogfile.Name Set wmiSWbemObject = GetObject _ ("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2:" _ & "Win32_NTEventlogFile.Name='" & strLogFileName & "'") wmiSWbemObject.MaxFileSize = 1024000 wmiSWbemObject.OverwriteOutdated = 0 wmiSWbemObject.Put_ Next WindowsXPSP2では動作したのですが、Windows2000SP4では以下のエラーが発生します。 Windows Script Host スクリプト:スクリプトの場所 行:14 文字:5 エラー:WBEM_FLAG_USE_AMENDED_QUALIFIERSが指定されていない場合は修正オブジェクトを置くことはできません コード:80041066 ソース:SWbemObject VBSについては全く理解できておりません。 Windows2000で動作させるためにんはどこを修正すればいいでしょうか?