PowerShell:更新计划任务用户名和密码?

时间:2012-02-28 18:59:15

标签: powershell scheduled-tasks

我正在寻找一种方法来更新计算机上现有计划任务的凭据。

  • Schtasks不适用于AT创建的计划任务
  • Win32_ScheduledJob仅适用于AT创建的作业
  • Schedule.Service COM对象 - 不确定

似乎我可以使用RegisterTask和RegisterTaskDefinition来创建计划任务,但我不清楚我是否可以使用这些方法更新现有凭据。请指教。 THX。

2 个答案:

答案 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
}