我正在寻找一种方法来更新计算机上现有计划任务的凭据。
似乎我可以使用RegisterTask和RegisterTaskDefinition来创建计划任务,但我不清楚我是否可以使用这些方法更新现有凭据。请指教。 THX。
答案 0 :(得分:1)
我建议您查看托管的TaskScheduler API,它是TaskScheduler COM API的.NET包装器。它是CodePlex上的一个开源项目。
http://taskscheduler.codeplex.com/
项目作者有关于更新密码的说法:
如果您尝试使用的凭据创建任务 当前用户,您只希望它在该用户登录时运行, 你需要在最后调用RegisterTaskDefinition方法 具有InteractiveToken参数的Complex示例。如果你需要 要创建另一个特定用户,然后使用相同的方法,但 提供用户名,密码,并将TaskLogonType设置为 InteractiveTokenOrPassword或密码。有一些触发器 特定于用户,例如您也可以使用LogonTrigger 提供用户凭证。
RegisterTaskDefinition
的适当重载在TaskFolder.cs中定义。
http://taskscheduler.codeplex.com/SourceControl/changeset/view/75611#19440
public Task RegisterTaskDefinition(string Path, TaskDefinition definition
, TaskCreation createType, string UserId, string password = null
, TaskLogonType LogonType = TaskLogonType.S4U, string sddl = null)
答案 1 :(得分:0)
我最近完成了这项任务。我知道这篇文章很旧,但是想把这个脚本放到某个地方,以便人们找到希望帮助他们的东西。这是纯电源外壳,因此不需要额外的设置。我曾尝试使用Set-ScheduledTask,但在设置域用户时遇到问题。我最终改为使用schtasks。您可能需要以管理员身份运行此脚本。
$domainUsername = "domain\user"
$password= "somePassword"
$tasks = Get-ScheduledTask | Where-Object { $_.Principal.UserId -eq $domainUsername }
foreach ($task in $tasks) {
$myTask = $task.TaskPath+$task.TaskName
echo changing $myTask
schtasks /change /s $env:COMPUTERNAME /tn $myTask /ru $domainUsername /rp $password
}