• ベストアンサー

VBAでネットワーク上のバッチジョブを実行したい

クライアントPCのVBAからサーバなどのネットワーク上のバッチジョブを実行するにはどのようにすればよいでしょうか?   Dim WshShell Set WshShell = CreateObject("WScript.Shell") WshShell.Run "\\サーバ名\AAAAA\BAT\TEST.bat", , True MsgBox "終了!" Set WshShell = Nothing 上記を参考にしたのですが、どうもうまくいかないのです。 何かが足りないのですか?

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

  • ベストアンサー
noname#245936
noname#245936
回答No.5

No1で回答した者です。 なるほど、サーバサイドで実行したいとのことですね。 となりますと、クライアントからのShell呼び出しは、 クライアント実装なので、NG。 ソフトがサーバにあっても、クライアントインスタンスで 動作します。 簡単な例えで言いますと。 Webサーバでもなんでもそうですが、別の筺体のプログラムを 遠隔で処理できるようにするには、やはり。 「サーバ側で常に待ち構えている(という意味で"Server")ソフト」 と、「クライアントでトリガを発行するソフト」という2本立ての 手段をとります。 なぜ遠隔操作するのに「サーバ待ち構えソフト」が必要かというと、 ごく単純にセキュリティの問題で。 VBAのShell関数くんだりで、Delete 遠隔Fileコマンドなど発行 されると、YahooでもGoogleでも遠隔で削除できてしまうので 迷惑極まりないと。 よって、そうできない決まりになっています。 さて。 通常はサーバに対しリクエストをかける方法としては、 Socket通信など、TCP/IPで行うのがセオリーなんですが。 社内LANなど小さい、セキュリティを気にしなくていい ネットワークでは真似ごととしてこんなやりかたもできます。 1.サーバサイドにバッチファイルを仕込む。   そのバッチは、「どこかWindows共有フォルダに特定の   ファイル名のファイルが入ると別プログラムをキックする   もの」を作ります。   簡単にはVBScriptなどで   If (どこどこのファイルが見つかった) Then Shell "Notepad.exe" 'メモ帳起動   End If   という短いものでいいです。 2.上記のプログラムは一瞬で終わってしまうので、偽装常駐   させるため、Windowsのタスクで1分ごとにでも常に実行する   設定をします。   常に1分ごとに動作させておきます。 3.VBA側で、サーバの共有フォルダに特定の名前のファイルを   放り込みます。 …この理屈で動きますよね(笑) 実際に、サーバなどという仕組みは。 簡単にいえば、上記1,2の機能を実装したようなソフトで。 …こんなしょうもないもんです。 なんでも試してやってみるといいんじゃないでしょうか? ちなみに、サーバサイドのプログラムで「"終了"」などの 画面を出すことはよろしくありません。 プログラムがOKを押すまで止まってしまいますよ。

kuriosprj
質問者

お礼

サーバ側でファイルの常駐監視をして動くしくみを結局つくりました。 皆様ありがとうございました。

その他の回答 (4)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.4

ANo.2 補足へのアドバイスです。 WshRemoteでなくてもサーバの何かを起動するためには、ANo.1 yama-takuさんが書かれていますようにかなりの準備が必要になるでしょう。それが面倒でしたら別の方法を考えた方がよいでしょう。例えばサーバ側ではCOBOLのプログラムを定期的に実行し、クライアント側ではその結果のファイルを参照するとか。 情報が小出しになりますけれども、やはりWshRemoteでやってみようという場合のため、Windows XP SP2での設定方法のリンクを書いておきます。タイトルはWMIですがWshRemoteでも同様の設定が必要です。 Windows XP SP2のWMIに関する問題のトラブルシューティング方法 http://support.microsoft.com/kb/875605/ja もしWindows XP SP2でワークグループの場合は下記の設定(ForceGuest=0にする)も必要です。 ワークグループにインストールされているWin XP Proでセキュリティを設定する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;jp290403 面倒ですね。(^^;;;

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.3

環境に依存するのでお役に立つかどうかわかりませんけれども、VBAではなくWSH(VBSCriptならVBAと文法は似たようなものです)WshRemoteを使うと他のコンピュータにスクリプトを送って実行できます。スクリプトは他のコンピュータで実行されます。WshRemoteについては下記の@ITのページが詳しいです。 WshControllerオブジェクト、WshRemoteオブジェクト http://www.atmarkit.co.jp/fwin2k/operation/wsh09/wsh09_01.html ドメインでは経験ありませんがワークグループのWindows XP SP2 Pro同士(admin権限の同じユーザ名、同じパスワード)で試したことはあります。Windows XP SP2ではファイアウォール、及びDCOMを設定する必要があります。 ----- ところでサーバ側で実行するバッチジョブは何をするものでしょうか。最終的に行いたいことがコンピュータの情報の取得でしたらWMI(Microsoft Windows Management Instrumentation)の方が簡単だと思います。

kuriosprj
質問者

補足

>サーバ側で実行するバッチジョブは何をするものでしょうか cobolのプログラムを実行するバッチです。 DCOMとか私には全く理解の範囲を超えています。 また、WshControllerオブジェクト、WshRemoteオブジェクトはレジストリを変更する必要があることが書いてありましたけど、そこまではしたいないですね。

noname#147912
noname#147912
回答No.2

そのバッチに問題があると思います。 クライアントPCからだとフォルダ名が「\\サーバ名\AAAAA\BAT\」になっているように、 バッチの中のコマンドも「dir C:\*.txt」じゃ動きません。なぜならC:が存在しないのです。クライアントからサーバのC:にアクセス権限する権限もないです。バッチの中のコマンドが「dir \\サーバ名\AAAAA\BAT\*.txt」なら動きます。

noname#245936
noname#245936
回答No.1

バッチジョブを「どこで」やりたいかによります。 貴方のソースコードの場合、サーバに存在するバッチファイルを クライアントで実行するソースになっています。 当初の目的がそれでもいいのであれば、ごく単純にサーバログインの アカウントが通っていないだけのような気がします。 サーバ上にクライアントのアカウントと権限を振り、かつ、 フォルダにアクセス権限、実行権限を与えれば上記コマンドが 動くと思います。 この場合は「終了!」メッセージはクライアントに表示され、 コマンドもクライアントで実行されます。 また、別途。 上記の「終了!」というメッセージをサーバで表示したい、つまり、 サーバサイドで実行させたい場合は、上記のソースコードでは 無理です。 基本的にクライアントからサーバ上への実行インスタンスを 作ることは直接は不可能ですので、普通はサーバの「常駐サービス」 を用意します。 簡単にいえば、何らかの常駐してコマンドを実行するサーバの 別プログラムに対し、Socket通信でも、Webでもいいので、クライ アントからトリガとなる「通信」を与えてやる手段をとります。

kuriosprj
質問者

補足

yamaーtakuさん、早速ありがとうございます。 バッチジョブはサーバに存在し、そこで実行したいのです。 あくまでクライアントはトリガです。 それが前提なんですが、サーバ側で何か用意する必要があるのですか? その辺がよく理解できないところなんです。 実をいうと、VBAに関しても素人同然なんです。

関連するQ&A

  • VBSでバッチを実行できません。

    C:\temp\test.batをVBSで実行しようとするのですが、 何度やっても実行されません。 想像ですが、c:\WINNT\System32\cmd.exeが動いている ようなのですが、肝心のC:\temp\test.batが動きません。 以下のように記述しました。 Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run ("cmd /c c:\temp\test,0,True") WIN2K、IE6.0の環境です。 どこか記述に誤りでもあるのでしょうか? どうぞよろしくお願いいたします。

  • ASPからVBScriptの実行

    ASPから下のVBScriptを実行使用とすると "500"Internal Server Error が出力されて困ってます。 へるぷみー Dim objWSHShell Set objWSHShell=WScript.CreateObject("WScript.Shell") objWSHShell.Run "cscript.exe d:\test.bat" objWSHShell=Nothing

  • Accessからバッチファイルを実行したい

    accessのVBAで、フォルダ内にあるバッチファイルを実行したいのですが、 このサイトを参考につくってみたのですが、うまくいきません。 http://blog.s21g.com/articles/1202 「実行時エラー-2147024894 Runメソッドは失敗しました。'IWshShell3'オブジェクト」 とでます。 どうしたらいいか教えてください。。。 ちなみに、そのバッチは単純にCSVを他の格納先から、ダウンロードするだけの単純なバッチです。 ------------- Private Sub バッチ実行_Click() Dim strShellCommand As String Dim objWSH As Object strShellCommand = "\\~省略~類¥DL_BOPE.bat" ' バッチのあるパスとバッチファイルの名前を入れています Set objWSH = CreateObject("WScript.Shell") objWSH.Run strShellCommand, vbNormalFocus, True ' 第3引数がTrueなら、同期実行 Set objWSH = Nothing End Sub

  • ASPからVBS実行時の権限

    ASPからWscript.Shellを使ってVBSを実行しているのですが、 ASP中のDBオープンには問題はないのですが、test.vbs中でオープンできません LOGファイルは"dbConnection-OK"までになっています。 権限の問題かどうかはわからないのですが、原因は何でしょうか? DBはODBC経由のSQLServerです。 ---------ASP-------------------------------------- <% Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") dbConnection.Open "testdb" dbConnection.Close Set dbConnection = Nothing '上記OPENに関して問題なし Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cscript.exe e:\test.vbs 123", 0, True Set WshShell = Nothing %> <html> <head> <meta http-equiv="Cache-Control" content="no-cache" /> <title>Pipot.to</title> </head> <body> OK </body> </html> ---------test.vbs-------------------------------------- Dim ObjFSO Dim ObjTS Set ObjFSO = CreateObject("Scripting.FileSystemObject") Set ObjTS = ObjFSO.CreateTextFile("e:\log.txt") ObjTS.Write "LOG開始" Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") ObjTS.Write "dbConnection-OK" dbConnection.Open "testdb" ObjTS.Write "OPEN-OK" dbConnection.Close Set dbConnection = Nothing ObjTS.Close Set ObjTS = Nothing Set ObjFSO = Nothing

  • vbsからbatを動かしたいです♪

    vbsからbatを動かしたいです♪ リモートでマシンを動かしたいのですが・・・。 動きません!なぜでしょう? どなたか助けてください、お願いします。 =============== Set shell = CreateObject("Wscript.Shell") shell.Run "\\(マシン名)\C$test\test.bat" set shell = nothing =============

  • 緊急です。Wscriptで・・・

    IIS上にあるASPファイルからWscriptを呼び出して、VBで作成したEXEを実行させたいのですが、上手くいきません。コマンドプロンプトから実行させると上手くいくのですが、どうしてでしょうか?ASPはIIS上にあり、test.exeを実行すると別サーバにファイル(例 \\サーバ名\bbb\OK.txt)を作成するといったプログラムです。UNCパス指定だからでしょうか?よろしくお願いします。 ASPファイル内容--------- <%@ language="VBScript"%> <html> <body> テストASP <% Dim WshShell Set WshShell = Server.CreateObject("WScript.Shell") WshShell.Run "\\サーバ名\aaa\test.exe" , 0 , false Set WshShell = Nothing %> </body> </html>

  • ASPからWscriptを利用して外部ファイル起動時のエラー

    他の掲示板で投稿されていた質問ですが、同様の現象に はまっています。ご存知でしたらご教授ください。 以下、引用。 環境:Windows XP SP2 , IIS5.1 サンプルプログラム: 1.test.asp  (Wscript.Shell.Runで同じフォルダにあるバッチファイルを実行) ----------------------------------------- <%@Language=VBScript%> <% Option Explicit dim WshShell Set WshShell = Server.CreateObject("WScript.Shell") WshShell.Run "C:\wsh\test.bat" Set WshShell = Nothing %> aaaaa ----------------------------------------- 2.test.bat   (同じフォルダのテキストファイルに文字列を出力) ----------------------------------------- echo aaa > c:\wsh\testbat.txt ----------------------------------------- 現象: 実行したところ、以下のエラーが発生します。 ----------------------------------------- Microsoft VBScript 実行時エラー (0x800A0046) 書き込みできません。 /wsh/test.asp, line 6 ----------------------------------------- 試したこと: 1.バッチファイルを実行する箇所をなくしたASPを作成   ⇒ 正常に動きました 2.他の環境での確認   ⇒ Windows2000Server : 正常に動きました     後輩のXP SP2    : 同様のエラーが発生しました 3.仮想フォルダの匿名アクセスのチェックを外す   ⇒ 正常に動きました 4.IUSR_,IWAM_ユーザーにAdministrators、Users,Guests等の権限をふる   ⇒ 同様のエラーが発生しました 5.ASPファイルなどを格納しているフォルダにIUSR_、IWAM_を追加し   フルコントロールの権限を与える   ⇒ 同様のエラーが発生しました

  • JP1からvbs(PSExec)が起動できない

    突然失礼します。 以下のサーバーAにあるvbsを、JP1から起動しようとしていますが、うまく起動しないので、もし原因が分かる方がいたら、ご教授願いたいです。 起動しようとしているサーバーAの「test.vbs」は、簡単に言うと、PsExecを利用して、サーバーBの「hoge.bat」を実行する内容です。 ***test.vbs*** Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "PsExec.exe サーバーBIPアドレス -u 実行ユーザ -p 実行ユーザーパスワード cmd" WshShell.AppActivate "cmd " WScript.Sleep 3000 WshShell.SendKeys "cd C:\" WshShell.SendKeys "{enter}" WshShell.SendKeys "hoge.bat" WshShell.SendKeys "{enter}" WScript.Sleep 10000 WshShell.AppActivate "cmd" WshShell.SendKeys "exit" WshShell.SendKeys "{enter}" ************************ 上記バッチを手動で実行するとうまくいくのですが、 JP1で起動しようとすると、うまくいきません。 そもそもPsExecが実行出来ていないかも。。。。 宜しくお願いします。

  • バッチファイルからVBA実行でエラー

    バッチファイルからエクセルのマクロを動かそうとしているのですが、 処理はきちんと動いて処理を行なうのに、エラーウィンドウが出力され ”未知実行時エラーです”(画像添付)となり困っています。 どうすれば、このエラーを無くせますでしょうか? 因みにバッチファイルは以下の通りです。 Dim obj Set obj = WScript.CreateObject("Excel.Application") obj.Visible = True obj.Workbooks.Open "C:\Documents and Settings\ne05576\My Documents\Datamove.xls" obj.Application.Run "FileMove" よろしくお願いします。

  • マシンの再起動とWindowsの再起動の違いは?

    マシンの再起動とWindowsの再起動では、どういう違いがあるんでしょうか? お願いします http://tclock2ch.hp.infoseek.co.jp/storeroom.htm マシンの再起動-Reboot.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL32.EXE Shell32.dll,SHExitWindowsEx 2" -------------------------------------------------------------------------------- Windowsの再起動-Restart.vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "C:\WINDOWS\RUNDLL.EXE USER.EXE,ExitWindowsExec"

専門家に質問してみよう