
在任務規劃程式中,我有一個使用執行批次檔的系統帳戶的任務。使用者(非管理員)有另一個執行該任務的批次檔。使用者的批次如何設定可以被任務的批次使用的變數?
答案1
在將由任務計劃程序執行的批次腳本中動態設定變數值
鑑於您已澄清並確認以下事項:
- 您需要批次腳本中的變數值任務調度程序執行為
SYSTEM
設定為與執行登入腳本的使用者的 SID 相符的值- 您可以使用每台電腦的本機檔案路徑作為腳本位置任務調度程序將執行
- 您永遠不會有多個使用者同時登入相同作業系統來執行此腳本
我已將此解決方案寫為單獨的答案,其中包含建議方法的更多詳細資訊。
您需要確保以下幾點:
- 確認相關性 計劃任務名稱是在將在本機執行批次腳本的每台電腦上設定的
- 確認每個相關計劃任務在每台機器上執行的
schtasks
所有腳本都指向同一個標準批次腳本路徑和檔案名稱。
批次[登入]腳本範例
我重用了您已經為此設定的邏輯,但我添加了一些額外的變數和條件如果如果本機資料夾尚不存在,批次腳本將駐留在本機上的本機資料夾中,並且刪除該資料夾中的批次文件(如果它在每次運行時創建)已經存在。
本質上,這將在每次執行(登入時)時建立一個動態批次腳本。它建立的批次腳本將包含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):
欄位留空或空,其中不包含任何內容(下面的螢幕截圖)。