質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

3回答

26671閲覧

vbsからコマンド実行して、その処理が終わるまで次の処理に行かないようにしたい

javabigineer

総合スコア87

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

1クリップ

投稿2017/06/13 06:55

編集2017/06/13 11:45

VBSファイルから外部コマンドを実行して、その処理が終わるまで次の処理を走らさないようにしたいです。

WshShell.Runを使用することで、それは可能だということはわかったのですが、
今度は管理者権限でコマンド実行する方法が分かりません。
WshShell.Runでも管理者権限で実行できるのでしょうか?

現状はこれでコマンド実行できているのですが、処理が終わる前に次の処理が走ってしまいます。。

Set app = Wscript.CreateObject("Shell.Application") 'app.ShellExecute "Dism.exe", "/online /enable-feature /featurename:NetFX3 /All /Source:C:\sources\sxs /LimitAccess", ,"runas"

下記のようにWshShell.Runにすると、管理者権限で実行できない。。

Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run("Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:C:\sources\sxs /LimitAccess")

どなたかご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自身を管理者権限で再起動する手段ではいかがでしょうか?
VBScriptを管理者権限で実行する

Win10x64で動作しました。

手順

  • hoge.wsfをダブルクリックして起動
  • UAC画面が表示されるので「はい」を選択
  • dism.exe画面が表示~実行される
  • 終了(長いのでCtrl+Cで中断)後に「end」表示される。

hoge.wsf

VBScript

1<job> 2<script language="VBScript"> 3' Vista以上なら、このスクリプトを管理者権限で再起動する 4do while WScript.Arguments.Count=0 and WScript.Version>=5.7 5 'WScript.Echo "for runas ScriptFullName[" & WScript.ScriptFullName & "]" 6 'Run this script as admin. 7 Set sha=CreateObject("Shell.Application") 8 sha.ShellExecute "wscript.exe","""" + WScript.ScriptFullName + """ uac","","runas" 9 WScript.Quit 10loop 11'WScript.Echo "main ScriptFullName[" & WScript.ScriptFullName & "]" 12 13' 実際の処理 14 15Set WshShell = WScript.CreateObject("WScript.Shell") 16' 1=画面表示, True=同期 17WshShell.Run "Dism.exe /Online /Cleanup-Image /ScanHealth", 1, True 18 19' 終了後に表示される 20WScript.Echo "end" 21</script> 22</job>

投稿2017/06/14 09:00

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

両立は出来ないと思うので、プロセス起動後に、プロセス一覧を取得して、実行中のプロセスが終了するまでsleepしながら、ループするくらいでしょうか。

投稿2017/06/13 13:36

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javabigineer

2017/06/13 23:55

ご解答ありがとうございます。 プロセスの起動等、よくわかっていないのですが、shellexecuteのやり方にプロセス起動の処理を追加するようなイメージでしょうか?
otn

2017/06/14 00:18

shellexecute =「プロセスの起動」 です。
javabigineer

2017/06/14 04:17

プロセスが終了するまでループとは、たとえばどのような処理になるでしょうか? 自分で調べるべきということは重々承知しておりますが、急ぎの案件ですのでお力添えいただけると助かります!
otn

2017/06/14 08:57

ループは、do ~ loop です。プロセスが終了したら、exit doでループを抜けます。 実行中のプロセス一覧を得るのは、「vbs プロセス一覧」とかでググって下さい。 > 急ぎの案件ですので 急がば回れです。
guest

0

スクリプトの中で管理者権限を持つユーザーに昇格することはできません。管理者権限で起動したコマンドプロンプトから自分のスクリプトを起動するか、自分のスクリプトを起動するバッチファイルを作って、それを管理者権限で実行すれば良いと思います。

投稿2017/06/13 13:06

tohshima

総合スコア374

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javabigineer

2017/06/13 23:53

runas では管理者権限で実行できないということでしょうか? 実行ファイルは複数にしたくないのですが、やりようないんですかね。。
tohshima

2017/06/14 03:12

言葉足らずでした。 「スクリプトの途中の処理から管理者権限が必要な処理を行えない」ですね。おっしゃるように、runasも手段の一つだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問