![如何将参数传递给计划任务?](https://linux22.com/image/1533545/%E5%A6%82%E4%BD%95%E5%B0%86%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%EF%BC%9F.png)
在任务计划程序中,我有一个使用 SYSTEM 帐户运行批处理文件的任务。用户(非管理员)有另一个运行该任务的批处理文件。用户的批处理如何设置任务批处理可以使用的变量?
答案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):
下面的屏幕截图)。