LocalSystem権限でコマンドを実行する方法

124

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です