タスクスケジューラには、バッチファイルを実行するSYSTEMアカウントを使用するタスクがあります。ユーザー(非管理者)には、タスクを実行する別のバッチファイルがあります。ユーザーのバッチは、タスクのバッチで使用できる変数をどのように設定できますか?
タスクスケジューラによって実行されるバッチスクリプトに変数値を動的に設定します
次のことを明確にして確認したので:
- Task Schedulerが
SYSTEM
として実行するバッチスクリプト内の変数値は、SIDと一致する値として設定する必要がありますログインスクリプトを実行するユーザーの- タスクスケジューラが実行するスクリプトの場所には、マシンごとのローカルファイルパスを使用できます
- このスクリプトを実行する複数のユーザーが同じOSに同時にサインインすることはありません。
私はこのソリューションを、提案されたアプローチの詳細を含む別の回答として作成しました。
次のことを確認する必要があります。
- 関連付けられたScheduled Taskの名前が、バッチスクリプトをローカルで実行する各マシンにセットアップされていることを確認します
schtasks
で実行される各マシン上の各相関スケジュールされたタスクがすべて同じ1つの標準バッチスクリプトパスとファイル名を指していることを確認します。
すでに設定したロジックを再利用しましたが、いくつかの変数と条件付きを追加しました [〜#〜] if [〜#〜] ローカルマシンのローカルフォルダーをバッチにするロジックスクリプトは、まだ存在しない場合は常駐し、実行ごとに作成されてからすでに存在する場合は、そのフォルダー内のバッチファイル delete になります。
基本的に、これにより、実行されるたびに(ログイン時に)動的バッチスクリプトが作成されます。作成するバッチスクリプトには、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/Script
フィールドが指す値と同じです。 SET LocalDir=
変数の値をStart in (optional):
フィールドに入力することもお勧めしますが、引数を追加する必要がないため、Add Arguments (optional):
フィールドを空白のままにするか、何も入れずに空のままにします(スクリーンショットの下)。