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を押すまで止まってしまいますよ。
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=k …
面倒ですね。(^^;;;
No.3
- 回答日時:
環境に依存するのでお役に立つかどうかわかりませんけれども、VBAではなくWSH(VBSCriptならVBAと文法は似たようなものです)WshRemoteを使うと他のコンピュータにスクリプトを送って実行できます。
スクリプトは他のコンピュータで実行されます。WshRemoteについては下記の@ITのページが詳しいです。WshControllerオブジェクト、WshRemoteオブジェクト
http://www.atmarkit.co.jp/fwin2k/operation/wsh09 …
ドメインでは経験ありませんがワークグループのWindows XP SP2 Pro同士(admin権限の同じユーザ名、同じパスワード)で試したことはあります。Windows XP SP2ではファイアウォール、及びDCOMを設定する必要があります。
-----
ところでサーバ側で実行するバッチジョブは何をするものでしょうか。最終的に行いたいことがコンピュータの情報の取得でしたらWMI(Microsoft Windows Management Instrumentation)の方が簡単だと思います。
この回答への補足
>サーバ側で実行するバッチジョブは何をするものでしょうか
cobolのプログラムを実行するバッチです。
DCOMとか私には全く理解の範囲を超えています。
また、WshControllerオブジェクト、WshRemoteオブジェクトはレジストリを変更する必要があることが書いてありましたけど、そこまではしたいないですね。
No.2
- 回答日時:
そのバッチに問題があると思います。
クライアントPCからだとフォルダ名が「\\サーバ名\AAAAA\BAT\」になっているように、
バッチの中のコマンドも「dir C:\*.txt」じゃ動きません。なぜならC:が存在しないのです。クライアントからサーバのC:にアクセス権限する権限もないです。バッチの中のコマンドが「dir \\サーバ名\AAAAA\BAT\*.txt」なら動きます。
No.1
- 回答日時:
バッチジョブを「どこで」やりたいかによります。
貴方のソースコードの場合、サーバに存在するバッチファイルを
クライアントで実行するソースになっています。
当初の目的がそれでもいいのであれば、ごく単純にサーバログインの
アカウントが通っていないだけのような気がします。
サーバ上にクライアントのアカウントと権限を振り、かつ、
フォルダにアクセス権限、実行権限を与えれば上記コマンドが
動くと思います。
この場合は「終了!」メッセージはクライアントに表示され、
コマンドもクライアントで実行されます。
また、別途。
上記の「終了!」というメッセージをサーバで表示したい、つまり、
サーバサイドで実行させたい場合は、上記のソースコードでは
無理です。
基本的にクライアントからサーバ上への実行インスタンスを
作ることは直接は不可能ですので、普通はサーバの「常駐サービス」
を用意します。
簡単にいえば、何らかの常駐してコマンドを実行するサーバの
別プログラムに対し、Socket通信でも、Webでもいいので、クライ
アントからトリガとなる「通信」を与えてやる手段をとります。
この回答への補足
yamaーtakuさん、早速ありがとうございます。
バッチジョブはサーバに存在し、そこで実行したいのです。
あくまでクライアントはトリガです。
それが前提なんですが、サーバ側で何か用意する必要があるのですか?
その辺がよく理解できないところなんです。
実をいうと、VBAに関しても素人同然なんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
歩いた自慢大会
「めちゃくちゃ歩いたエピソード」を教えてください。 長時間でも長距離でも結構です。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ネットワークドライブ上のVBScript
Windows 10
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
コマンドプロンプトから別マシンに命令を投げれるでしょうか
UNIX・Linux
-
-
4
BATファイル内で、他のネットワークドライブにある
UNIX・Linux
-
5
エクセルVBAで、バッチ処理を起動すると・・・
Excel(エクセル)
-
6
ネットワーク上のコンピュータのファイルを起動させる
その他(プログラミング・Web制作)
-
7
ユーザーアカウントが複数ある場合のタスクスケジュール設定
サーバー
-
8
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
VBAでバッチファイルを1つ実行する方法がうまくいきません
Visual Basic(VBA)
-
11
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでネットワーク上のバッ...
-
ASP AccessDBオープン出来ない
-
Eclipse の設定ができません。
-
管理者権限のないユーザーだと...
-
VBS でユーザ名からそのユーザ...
-
ctfmon.exe。スタック ベースの...
-
OracleInProcServer.XOraSessio...
-
タスクバーのボタンがオレンジ...
-
windows vistaで、最近 KACT2
-
VB.NET ORA-12170
-
web.configとは?(初心者です)
-
TeraTermマクロの”Link...
-
コマンドボタンのキャプション...
-
GridviewとDataGridviewの違い
-
Windowsが起動しなくなってしま...
-
powershellの初心者です(form...
-
Media Gallery?勝手に起動
-
audiveris(pdf楽譜を読み込む...
-
HRESULTからの例外:0x8007000B
-
コマンドプロンプトのERRORLEVE...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでネットワーク上のバッ...
-
IUSR でCreateObject("Excel.Ap...
-
IIS7.5 Excel ファイルオープ...
-
Windowsサーバー、PHPでアクセ...
-
ASP AccessDBオープン出来ない
-
管理者権限のないユーザーだと...
-
EXCEL「Dictionaryオブジェクト...
-
ASP.NET での処理表示について
-
IISのユーザについて
-
LogonUser関数が ERROR_PRIVIL...
-
VBS でユーザ名からそのユーザ...
-
PowerDVD15のデバイス&ホーム...
-
MPC4ファイルをiTunesに入れら...
-
ユーザーアカウント制御について
-
Tomcatで新しいアプリを追加し...
-
実行エラーとユーザー権限
-
Windows2000 と SQLServer2000 ...
-
サーバとVBの連携
-
McAfeeの使い方
-
パーミッションについて
おすすめ情報