我已经在这个问题上乱了3天了,我还没有找到解决方案。 :(
基本目标是在1500多个Windows服务器上修改计划任务,只需要修改的是运行时参数。例如 updater / silentall / set retryattempts 10 需要改为 updater / silentall
我们可以通过一个限制访问所有远程服务器上的调用命令。所有命令都以SYSTEM帐户身份执行,因为执行自定义命令的应用程序的远程Windows服务正在SYSTEM帐户下运行。
如果我尝试创建新的计划任务,则会创建它以在SYSTEM帐户下运行,因为我们不知道创建先前更新程序任务的用户。以下是我执行以创建计划任务的内容:
SchTasks /Create /SC DAILY /TN "updater3" /TR "\"pathToUpdater\updater.exe\" /silentall" /RU SYSTEM /ST 09:00
作为SYSTEM运行的计划任务失败,因为更新程序仅在由登录用户/管理员触发时显示UI。更新程序的限制如下:
以下是流程: 预定任务触发器 - >更新程序 - >下载一个--->设置文件--->需要显示UI才能提取/更新目标目录中的文件
问题: 如果以SYSTEM身份运行计划任务,则将updater.exe作为SYSTEM运行,而后者又将下载的设置作为SYSTEM运行,因为调用者是SYSTEM,因此无法提取UI。因此,计划任务的调用者必须是登录的管理员。
我试图执行以下命令,但没有遇到运气或正确的值。
quser
whoami
echo %userdomain%\%username%
echo %computer%\%username%
@echo off && for /f "skip=1 tokens=1" %a in ('quser') do (set username=%computername%\\%a) && echo !username!
@echo off && SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name"" FOR /F "tokens=3,4 delims=, " %A IN ('%TNAME%') DO SET DNAME=%B%A && echo %DNAME%
有什么可以帮助我? 我需要一个批处理脚本,它将获得用户在安装过程中首先创建更新程序计划任务的同一用户的正确用户名(domainname \ admin)。
或者,如果有办法修改现有的计划任务的运行时参数,则使用我们已有的远程命令调用功能在SYSTEM权限下执行命令时。
如果有人能帮我解决这个问题,我真的很感激。
由于
如果未使用RU开关指定用户名,则通过命令提示符(以管理员身份运行)更改任务也会提示输入密码: 命令:
SCHTASKS /change /tn "updater" /tr "\"C:\Program Files (x86)\My Company\My App\updater.exe\" /silentall"
SchTasks /CHANGE /TN "updater3" /TR "\"C:\Program Files (x86)\My Company\My App\updater.exe\" /silentall" /RU SYSTEM