スケジュールされたタスクに引数を渡すにはどうすればよいですか?

スケジュールされたタスクに引数を渡すにはどうすればよいですか?

タスク スケジューラには、バッチ ファイルを実行する SYSTEM アカウントを使用するタスクがあります。ユーザー (管理者以外) には、タスクを実行する別のバッチ ファイルがあります。ユーザーのバッチで、タスクのバッチで使用できる変数を設定するにはどうすればよいでしょうか。

答え1

タスクスケジューラによって実行されるバッチスクリプトで変数値を動的に設定する

以下の点を明確にし、確認しました。

  1. バッチスクリプトで変数値が必要になるのは、タスクスケジューラSYSTEMログインスクリプトを実行するユーザーのSIDに一致する値として設定されるように実行されます。
  2. スクリプトの場所には、マシンごとにローカルファイルパスを使用できます。タスクスケジューラ実行する
  3. 同じOSに同時に複数のユーザーがサインオンしてこのスクリプトを実行することはありません。

提案されたアプローチの詳細を記載した別の回答として、この解決策を書きました。

以下の点を確認してください。

  • 相関関係を確認する スケジュールされたタスクバッチスクリプトをローカルで実行する各マシンに名前が設定されます
  • それぞれが相関していることを確認するスケジュールされたタスク実行される各マシンでは、schtasksすべてが同じ 1 つの標準バッチ スクリプト パスとファイル名を指します。

バッチ [ログイン] スクリプトの例

すでに設定されているロジックを再利用しましたが、いくつかの変数と条件を追加しました。もしバッチスクリプトがまだ存在しない場合は、ローカルマシン上のローカルフォルダを作成するロジック、および消去バッチ ファイルは実行ごとに作成されるため、そのフォルダー内に既に存在する場合はそのフォルダーにバッチ ファイルが格納されます。

基本的に、これは実行されるたびに(ログイン時に)動的なバッチスクリプトを作成します。作成されるバッチスクリプトには、ログインReg Add時にログインスクリプトが実行されたユーザーのSID部分の値を持つロジックとコマンドが含まれます。タスクスケジューラスクリプトを実行すると、ログイン/スクリプトの実行ごとにスクリプトに必要な値が常に追加されるようになります。

@ECHO ON

SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd

IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"

for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i

ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"

schtasks /run /tn "My Profile Changer"

スケジュールされたタスク

に実行を指示するタスクschtasks(つまり"My Profile Changer") が、ログイン バッチ スクリプトで およびSET LocalDir=SET TaskScript=数値に指定したのと同じフル パスを指していることを確認するだけで済みます。

ログインスクリプトの変数が等しい場合、これはフィールドが指すC:\localfolder\TaskScript.cmd値と同じです。変数値をフィールドに入れることもお勧めしますが、引数を追加する必要はないので、Program/ScriptSET LocalDir=Start in (optional):Add Arguments (optional):フィールドは空白のままにしておきます (下のスクリーンショット)。

ここに画像の説明を入力してください


その他のリソース

関連情報