• 締切済み

WSHからのコマンドプロンプト実行

お世話になります。 OS:Windows7 Professional SP1 UAC:既定(上から2番目) 上記の条件で、WSHからコマンドプロンプトを管理者権限で立ち上げ、 ファイルをコピーするスクリプトを作成したいのですが・・・ 当方あまり知識が無く困り果ててる次第でございます。 *************************************************************************** Do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7 Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem") For Each value in os if left(value.Version, 3) < 6.0 then exit do Next Set sha = CreateObject("Shell.Application") sha.ShellExecute "cmd.exe", """" & WScript.ScriptFullName & """ uac", "", "runas" WScript.Quit loop *************************************************************************** 以上のコマンドでUsersからでも管理者権限でプロンプトが立ち上がる所までは確認しています。 このあと、プロンプト上で    "Copy D:\A.txt C:\Windows\System32 /y" を自動的に実行してくれるようなスクリプトにしたいのですが、どう記述すればよいのでしょうか? なるべくユーザーに負担をかけない形で、スクリプト一発で処理できたらと考えていますが・・・ ご指導よろしくお願い致します。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

Set oFS=Wscript.CreateObject("Scripting.FileSystemObject") oFS.CopyFile "d:\a.txt","C:\Windows\System32\" みたいな感じだとうごきませんか?

Omuletsu
質問者

お礼

ご回答ありがとうございます。 管理者として立ち上げたプロンプトに入力されるわけではないので、UACに弾かれてしまうようですね・・・ 勉強になりました。

  • a-yoshi
  • ベストアンサー率34% (222/645)
回答No.1

的外れなコメントになるかもしれませんが、以下のもので、IPCONFIG /ALL を実行させることができています。 Set objWS = CreateObject("WScript.Shell") Set objExec = objWS.Exec("cmd.exe /c ipconfig/all") (抜粋) これをこんな感じで実行してみてください。 Dim objWS Dim objExec Set objWS = CreateObject("WScript.Shell") Set objExec = objWS.Exec("cmd.exe /c Copy D:\A.txt C:\Windows\System32 /y") だめだったらごめんなさい。 では

Omuletsu
質問者

お礼

ご回答ありがとうございます。 私のスクリプトで立ち上がった管理者権限付きのプロンプトとは、別にプロンプトが立ち上がってしまうようです。 (コピーコマンドはUACで弾かれました) なかなか難しいものですね…

関連するQ&A

  • VBSで特定のディレクトリのファイルを上書きする

    C:\app\XXXXX\a\b\c\d\e\1.txt ■条件1 上記の1.txtを上書きしたい ■条件2 保護がかかっているので、XCOPYの要領で強制的に上書きしたい ■条件3 XXXXXがユーザーごとの名称になっている為、そこを無視したい ■条件4 C:\app\XXXXX\a\b\c\d\e\f\1.TXTという似たファイルがあるので、完全一致させたい ■条件5 実行するのはエンドユーザーで、管理者実行時のPWは周知していない 以上の条件の元、調べながらやってみたのですが、うまくいきません 下記の内容のどこを直せばいいでしょうか ------------------- Option Explicit Dim WMI, OS, Value, Shell do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7 Set WMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set OS = WMI.ExecQuery("SELECT *FROM Win32_OperatingSystem") For Each Value in OS if left(Value.Version, 3) < 6.0 then exit do Next Set Shell = CreateObject("Shell.Application") Shell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas" WScript.Quit loop Dim co, dt, f, gf, m, mf, n, so dt = CreateObject("WScript.Shell").SpecialFolders("Desktop") mf = dt & "\1.txt" co = "product\11.2.0\client_1\network\admin" Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) n = so.GetFileName(mf) For Each f In gf.SubFolders m = f & "\" & co If so.FolderExists(m) = True Then If so.FileExists(m & "\" & n) = True Then so.CopyFile mf, m & "\" & n, True End If End If Next Set gf = Nothing Set so = Nothing MsgBox("おわり") -------------------

  • コマンドプロンプトが開かない!

    コマンドプロンプトを開くと、一瞬表示されすぐに閉じてしまいます。 OSはWindows2000 アドミニ権限のユーザです。 新しくユーザを作成しても同じでした。 でも、セーフモードでは普通に起動しました。 どうしたらなおるのでしょうか? タスクマネージャ、REGEDITも同様でした。 お願いしますm(__)m

  • wshでDOSコマンドを利用するには。 パイプ処理

    http://www.okweb.ne.jp/kotaeru.php3?q=305516 の続きです。 wshでDOSコマンドのnetstat -nの値をメッセージボックスで表示するには、次のスクリプトの”コマンド”の部分にnetstat -nを入れることで可能です。 (FlossenEngel 様作成) ------------------------------------- Set WshShell = WScript.CreateObject("WScript.Shell") Set objExec = WshShell.Exec("コマンド") Do While objExec.Status = 0 WScript.Sleep(100) Loop sout = "" Do While Not objExec.StdOut.AtEndOfStream sout = sout & objExec.StdOut.ReadLine & Chr(13) & Chr(10) Loop MsgBox sout ----------------------------------------------- さて、netstat -n|find " ESTABLISHED" というぐあいに パイプ処理を行うにはどうすればよいでしょうか? Set objExec = WshShell.Exec("netstat -n|find " ESTABLISHED" ") とするとエラーになります。 "を入れ子にできないようですね。 解決方法ご存知の方おしえてくださいませ。

  • コマンドプロンプト(2000)で入力値によって処理を変えたい

    コマンドプロンプト(bat)プログラムの途中で ユーザからの入力を促して入力された値を 変数としてセットし、その値をif文などで 評価することにより分岐させて入力された値によって 様々な処理を行わすことは可能でしょうか。 シェルスクリプトであればreadコマンドのような ものに変わるコマンドを期待しています。 宜しくお願いいたします。

  • コマンドプロンプト欲しい結果が出力できない

    Windows2000です。 dateコマンドの日付から、2003年の「03」を出力したいのですが、うまくできません。 C:\>DATE /T 2003/07/07 月 C:\>for /f "tokens=1-2 delims=/,2 " %i in('date /t') do set year=%i と入力すると、 C:\>set year=003 と出てきます。 C:\>for /f "tokens=1-2 delims=/,20 " %i in ('date /t') do set year=%i と入力すると、 C:\>set year=3 と出てきます。これを、 C:\>set year=30 となるようなコマンドができません。 コマンドプロンプトに強い方がいらっしゃったら、教えてください・・・。

  • Runメソッドで実行したコマンドプロンプトの結果を1行ずつ取得する方法

    Runメソッドで実行したコマンドプロンプトの結果を1行ずつ取得する方法を教えてください。 pingの実行結果を1行ずつ取得したいのですがどうも上手く行きません。 Set WshShell = WScript.CreateObject("WScript.Shell") Set objWshScriptExec = WshShell.exec("ping 192.168.0.1") Set objStdOut = objWshScriptExec.StdOut strLine = objStdOut.ReadLine execメソッドを使用するのであればこんな感じで1行取得することが出来るかと思いますが、窓の非表示で同じことをやりたいので同じことをRunメソッドにて取得できればいう希望からの質問でした。 どうぞよろしくお願い致します。

  • エクセル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の電源ボタンも長押しないときかなくなります。 自動で電源は切れないのでしょうか?

  • コマンドプロンプトとシェルでの実行結果の違い

    OS:Redhat AS v4.0 /etc/init.d/配下の実行ファイルをスクリプトの中で呼び出して いますが、何故かスクリプト実行時と個々のコマンドで実行した時と アプリの文字コードが違いますが、何が原因なのでしょうか? コマンドプロンプトで実行した時:(文字コード)正常 root#/etc/init.d/xxx restart スクリプト経由で実行時:(文字コード)異常root#/opt/tools/script.sh ※スクリプトで/etc/init.d/xxx restart を呼び出すます。。

  • コマンドプロンプトの出力をVBScript内の変数に代入する

    VBScriptからコマンドプロンプトのver | findstr 5.1を実行し、その出力結果をVBScript内の変数に代入したいのですが、どうすればいいでしょうか? Dim WShell Dim result Set WShell = WScript.CreateObject("WScript.Shell") WShell.Run "cmd /c (ver | findstr XP > " & result & ")" MsgBox result とやってもresultには何も入っていませんでした。

  • コマンドプロンプトにてスタートアップにコピー

    "C:\Test\Test.exe"と"C:\Test\Test.exeへショートカット" の2つのファイルが存在します。 コマンドプロンプトにてショートカットファイルを スタートアップに登録(コピー)する方法を教えてください。 OS:WinNT SP6 及び Win2000 アドミニ権限にてOSは起動されています。