
タスク スケジューラには、バッチ ファイルを実行する SYSTEM アカウントを使用するタスクがあります。ユーザー (管理者以外) には、タスクを実行する別のバッチ ファイルがあります。ユーザーのバッチで、タスクのバッチで使用できる変数を設定するにはどうすればよいでしょうか。
答え1
タスクスケジューラによって実行されるバッチスクリプトで変数値を動的に設定する
以下の点を明確にし、確認しました。
- バッチスクリプトで変数値が必要になるのは、タスクスケジューラ
SYSTEM
ログインスクリプトを実行するユーザーのSIDに一致する値として設定されるように実行されます。- スクリプトの場所には、マシンごとにローカルファイルパスを使用できます。タスクスケジューラ実行する
- 同じ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/Script
SET LocalDir=
Start in (optional):
Add Arguments (optional):
フィールドは空白のままにしておきます (下のスクリーンショット)。