- PR -

DTS ActiveXからDOSコマンドを実行する方法について

1
投稿者投稿内容
AKKEY
会議室デビュー日: 2005/11/26
投稿数: 19
投稿日時: 2005-12-08 15:05
DTS絡みで矢継ぎ早に質問してしまって申し訳ありません。
DTSのActiveX(VBScript)からDOSコマンドを実行する方法
はありますでしょうか。

コマンド実行方法としては、「プロセス実行タスク」という
機能がDTSには用意されているのですが、コマンドに与える
引数を動的に変更したいため、この方法は諦めた次第です。

どなたかご存知でしたら、ご教授頂ければと思います。
よろしくお願いいたします。
kiyoharu
常連さん
会議室デビュー日: 2005/08/06
投稿数: 25
お住まい・勤務地: 神奈川県鎌倉市
投稿日時: 2005-12-08 22:47
お疲れ様です。
ちょっとググってみたのですが、vbsでbatファイルを起動するということなら
下記のように記述すればバッチファイルを起動できるようです。
こちらでSQL Server の ActiveXスクリプトタスクでの実行も試してみましたが
上手く動きましたよ。

Function Main()
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """D:\test.bat"""
Main = DTSTaskExecResult_Success
End Function

[ メッセージ編集済み 編集者: kiyoharu 編集日時 2005-12-08 23:08 ]
AKKEY
会議室デビュー日: 2005/11/26
投稿数: 19
投稿日時: 2005-12-09 12:00
kiyoharuさん

情報有難うございました。
下記サイトの方法で試してみたのですが、どうもうまく実行されていない
ようです。
テストでファイルに文字を書き出すDOSバッチを作成し、DTSのActiveXから
実行した所、ステータスは正常終了となるのですが、ファイルは作成
されていませんでした。

見かけ上はDOS窓が一瞬出て実行されているような感じなのですが・・・

何か環境の違いがあるのでしょうか・・


引用:

kiyoharuさんの書き込み (2005-12-08 22:47) より:
お疲れ様です。
ちょっとググってみたのですが、vbsでbatファイルを起動するということなら
下記のように記述すればバッチファイルを起動できるようです。
こちらでSQL Server の ActiveXスクリプトタスクでの実行も試してみましたが
上手く動きましたよ。

Function Main()
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """D:test.bat"""
Main = DTSTaskExecResult_Success
End Function

[ メッセージ編集済み 編集者: kiyoharu 編集日時 2005-12-08 23:08 ]

かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2005-12-09 15:38
引用:

見かけ上はDOS窓が一瞬出て実行されているような感じなのですが・・・


バッチの実行はできているようですね。

引用:

テストでファイルに文字を書き出すDOSバッチを作成し、DTSのActiveXから
実行した所、ステータスは正常終了となるのですが、ファイルは作成
されていませんでした。


異常終了してるのに、ステータスをうまく拾えてないってことはないでしょうか?
バッチの一番最後に PAUSE 入れて窓がすぐ閉じないようにしてみたらコケてるかどうか
わかると思います。
DTSってどのユーザーアカウントで実行されるんでしたっけ???
ファイルを作成する権限がないとか・・・

そんなのとっくに試してるよって場合はごめんなさい<m(__)m>
AKKEY
会議室デビュー日: 2005/11/26
投稿数: 19
投稿日時: 2005-12-09 17:54
かめたろさん

コメント有難うございました。

引用:

バッチの実行はできているようですね。

異常終了してるのに、ステータスをうまく拾えてないってことはないでしょうか?
バッチの一番最後に PAUSE 入れて窓がすぐ閉じないようにしてみたらコケてるかどうか
わかると思います。
DTSってどのユーザーアカウントで実行されるんでしたっけ???
ファイルを作成する権限がないとか・・・

そんなのとっくに試してるよって場合はごめんなさい<m(__)m>



私も同じことを考えました。PAUSEを入れてもすぐにDOS窓は閉じてしまいます。
また、DTSはWindows認証モードで実行していますので、ファイルアクセス権限
は特に問題ないと思います。

残念ですが、「プロセス実行タスク」でコマンドを実行し、変数はファイルに
記述して渡すようにします・・(しょぼい作りですが)

ご指摘有難うございました。
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-12-11 11:40
引用:

AKKEYさんの書き込み (2005-12-09 17:54) より:

私も同じことを考えました。PAUSEを入れてもすぐにDOS窓は閉じてしまいます。



お疲れ様です。

まず
■プロセス実行タスクでの動的なコマンドの変更について
「プロセス実行タスク」と「動的プロパティタスク」を組み合わせる
または
「プロセス実行タスク」と「ActiveX スクリプトタスク」を組み合わせる
ことで,実現できます。

具体的には,
プロセス実行タスク(たとえば「DTSTask_DTSCreateProcessTask_1」)の
「ProcessCommandLine」プロパティを設定してあげることによって,
任意のプロセスを立ち上げることができます。

■DOS 窓が落ちないように起動
こちらは,cmd.exe の起動をどう取り扱ったかに依存しますので,
cmd.exe 内で実行される bat に PAUSE をかけても終了してしまいます。

cmd.exe のオプション「/C | /K」のどちらで起動するかによります。

たとえば,先ほどの「ProcessCommandLine」で
「(systemrootに差し替えて)\cmd.exe "cmd /K ping 127.0.0.1"」
という風に指定すれば,
「実行後に DOS 窓が閉じずに継続されます」
原理は同じで,VBS からも,ActiveX からも,
「起動したプロセスがどこまで同期して制御が終わるか?」
を気にしてあげてください。

----------
TimberLandChapel.com Workshop
http://blogs.timberlandchapel.com/blogs/workshop/archive/2005/12/06/519.aspx

[ メッセージ編集済み 編集者: TLC 編集日時 2005-12-11 11:42 ]
AKKEY
会議室デビュー日: 2005/11/26
投稿数: 19
投稿日時: 2005-12-11 12:16
TLCさん

情報ありがとうございました。

引用:

まず
■プロセス実行タスクでの動的なコマンドの変更について
「プロセス実行タスク」と「動的プロパティタスク」を組み合わせる
または
「プロセス実行タスク」と「ActiveX スクリプトタスク」を組み合わせる
ことで,実現できます。

具体的には,
プロセス実行タスク(たとえば「DTSTask_DTSCreateProcessTask_1」)の
「ProcessCommandLine」プロパティを設定してあげることによって,
任意のプロセスを立ち上げることができます。



すみません。上記ActiveXスクリプトタスクを用いて動的にプロパティを割り当て
るやり方はどこかのサイトに載っているでしょうか。
プロセス実行タスクを含んだパッケージをVisual Basicファイルに保存して中身
を見ると、上記キーワードは見受けられるのですが、ActiveXスクリプトタスクから
実行するやり方がよく分りません。

引用:

■DOS 窓が落ちないように起動
こちらは,cmd.exe の起動をどう取り扱ったかに依存しますので,
cmd.exe 内で実行される bat に PAUSE をかけても終了してしまいます。

cmd.exe のオプション「/C | /K」のどちらで起動するかによります。

たとえば,先ほどの「ProcessCommandLine」で
「(systemrootに差し替えて)cmd.exe "cmd /K ping 127.0.0.1"」
という風に指定すれば,
「実行後に DOS 窓が閉じずに継続されます」
原理は同じで,VBS からも,ActiveX からも,
「起動したプロセスがどこまで同期して制御が終わるか?」
を気にしてあげてください。



こちらもありがとうございます。ただ、DOS窓をあげることが目的
ではなく、1つ目のやりかたが実現できれば十分です。

お手数ですが情報よろしくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)