Windows OSの一部には、デフォルトでadministrator権限でもアクセス出来ない部分があります。
この領域に対して操作を行う場合には、ATコマンドを実行し、LocalSystem権限でコマンドプロンプトを表示させ、操作を行います。
このコマンドを実行する場合には、Scheduleサービスが起動している必要があります。
ATコマンドは、指定された日時にコマンドとプログラムをコンピュータ上で実行するためのコマンドです。ATコマンドで実行したアプリケーションは既定でLocalSystem権限を持ちます。
ATコマンドでコマンドプロンプトを実行するようにスケジュールを組み、対話型ウィンドウを表示させる仕組みです。
at <時間> /interactive cmd.exe
<時間>の部分には、対話型ウィンドウを表示させる時間を指定します。例えば現在の時刻が19:18で、すぐに画面を開きたい場合には19:19と入力します。こうする事で、一分後にコマンドプロンプトがLocalSystem権限で実行できます。
at 19:19 /interactive cmd.exe
“/interactive”を省くと、コマンドプロンプトは画面表示されずに、バックグラウンドで実行されてしまいます。
スケジュールの削除方法
ATコマンドでタスクをスケジュールした場合には、実行後のタスク一覧が残ってしまいます。残っているタスク一覧を表示させる場合には、以下のコマンドを実行します。
at
スケジュールされたジョブを削除する場合には、以下のコマンドを実行します。
at /delete
ATコマンド ヘルプ
ATコマンドはこの他にも、リモートのコンピュータに対して対話型ウィンドウを表示させたい場合に有効です。
以下、ATコマンドのヘルプです。
AT コマンドは、指定された日時にコマンドとプログラムがコンピュータで 実行されるようにスケジュールします。AT コマンドを使用するには、 Schedule サービスが実行中でなければなりません。 AT [\\コンピュータ名] [ [id] [/DELETE] | /DELETE [/YES]] AT [\\コンピュータ名] 時刻 [/INTERACTIVE] [ /EVERY:日付[,...] | /NEXT:日付[,...]] "コマンド" \\コンピュータ名 リモート コンピュータを指定します。このパラメータを 省略したときは、ローカル コンピュータでコマンドが スケジュールされます。 id スケジュールされたコマンドに割り当てられた識別番号です。 /delete スケジュールされたコマンドを取り消します。 id を指定しなかったときは、コンピュータでスケジュール されているすべてのコマンドが取り消されます。 /yes 確認せずにすべてのジョブ コマンドを取り消すときに 使用します。 時刻 コマンドが実行される時刻を指定します。 /interactive ジョブの実行中、ジョブはログオンしているユーザーの デスクトップとの対話を許可します。 /every:日付[,...] 毎週指定した曜日に、または毎月指定した日にコマンドが 実行されます。 日付を省略したときは、その月の今日の日付が使用されます。 /next:日付[,...] 指定したコマンドが次の日付 (たとえば、次の火曜日) に 実行されます。日付を省略したときは、その月の今日の日付が 使用されます。 "コマンド" 実行する Windows NT コマンド、またはバッチ プログラム です。
おまけ
'一分後にATコマンドを実行させるスクリプト Option Explicit Dim vbSpace,strCMD Dim objShell,objExec Dim timeADD1Min,strEXE '実行したいコマンド strEXE = "cmd" timeAdd1Min = DateAdd("n",1,now) vbSpace = " " strCMD = "at" & vbSpace & DatePart("h",timeAdd1Min) & ":" & DatePart("n",timeAdd1Min) & vbSpace & "/interactive" & vbSpace & strEXE Wscript.Echo "↓今実行したコマンド↓" Wscript.Echo strCMD Wscript.Echo Call AT_EXEC(strCMD) 'スケジュール一覧の表示 Call AT_EXEC("at") Function AT_EXEC(strEXEC) Set objShell = WScript.CreateObject("WScript.Shell") Set objExec = objShell.Exec(strEXEC) Wscript.Echo objExec.StdOut.ReadAll End Function