web-dev-qa-db-ja.com

新しいコマンドラインウィンドウを開かずに、「schtasks」を使用してスケジュールされたタスクを実行するにはどうすればよいですか?

次のようにschtasksを使用してスケジュールされたタスクを作成するバッチファイルがあります。

schtasks /create /tn my_task_name 
                 /tr "...\my_path\my_task.bat"
                 /sc daily
                 /st 10:00:00 
                 /s \\my_computer_name 
                 /u my_username    
                 /p my_password

my_task.batが実行されると、新しいコマンドラインウィンドウが開かれる(実行後に閉じられる)という事実を除いて、問題なく動作します。

この新しいウィンドウを開かないようにしたい(つまり、タスクをクワイエットモードでバックグラウンドで実行する)。

使ってみようと思った

start /b ...\my_path\my_task.bat

しかし、方法はわかりません。バッチファイルからstartを呼び出す必要があるため、その前にcmd /cを付ける必要があります。これにより、新しいウィンドウが再び開きます。

どうすればこの問題を解決できますか?

6
Misha Moroshko

最後に、このコードを使用して問題を解決しました。

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "...\my_task.bat" & Chr(34), 0
Set WshShell = Nothing

それをrun_my_task.vbsに保存し、上記のようにschtasksrun_my_task.vbsをスケジュールしました。

1
Misha Moroshko

これを行うには、schtasksに/ RUオプションを指定します。このオプション

タスクを実行するユーザーアカウント(ユーザーコンテキスト)を指定します。システムアカウントの場合、有効な値は「」、「NT AUTHORITY\SYSTEM」、または「SYSTEM」です。

したがって、これを試してください

schtasks /create /tn my_task_name 
                  ....
                 /st 10:00:00 
                 /ru "SYSTEM"
                 ....
3
pmod

自分のアカウントとして実行するように設定したため、ボックスが表示されていると思います。次のいずれかを試してください。

1:ユーザーNT Authority\Systemとしてタスクを実行します

2:新しいアカウントを作成し、その資格情報を使用して実行するようにタスクを設定します

3

おそらくATコマンドを使用し、/interactiveスイッチを含めないでください。

例:
AT \\my_computer_name 10:00AM /EVERY:M,T,W,Th,F,S,Su "...\my_path\my_task.bat"

My_task.batを実行するための特定の資格情報が必要な場合は、コマンドにRUNASを入力する必要があります。これは、I believeコマンドがスケジュールのセキュリティコンテキストで実行されるためです(タスクスケジューラ)「ローカルシステム」アカウントであるサービス。 BATファイルの前にRUNASコマンドとスイッチを追加すると、それが修正されるはずです。

1