如何使用PowerShell将作者添加到Windows任务

3
我正在使用PowerShell创建一个窗口任务,一切都很好,但我找不到如何添加作者名称。在描述中,可以使用Register-ScheduledTask作为参数,但不能用于作者。
导出的Windows任务
 <RegistrationInfo>
    <Date>2016-05-17T16:45:54.3423362</Date>
    <Author>NEED TO SET THIS</Author>
    <URI>RunLauncherTask</URI>
  </RegistrationInfo>

这是我用来创建任务的代码:

$principal = New-ScheduledTaskPrincipal -UserId (Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -expand UserName)
$allTasks = Get-ScheduledTask | Select TaskName
$action = New-ScheduledTaskAction -Execute "C:\Launcher.exe"
$trigger = New-ScheduledTaskTrigger -AtLogOn
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal
$username = $principal.UserId
$taskName = 'RunLauncherTask' +  $username.Replace('\','-')
$settings = New-ScheduledTaskSettingsSet -DontStopIfGoingOnBatteries -AllowStartIfOnBatteries
Register-ScheduledTask $taskName -Action $action -Settings $settings

我该如何设置自动作者?

4个回答

6

以下是对我有效的做法。

创建任务后:

$taskObject = Get-ScheduledTask "Taskname"
$taskObject.Author = "authorname"
$taskObject | Set-ScheduledTask

2
在@Ivan的情况下,他也可以在创建任务时直接完成,因为他有$task对象。 - Gup3rSuR4c
太棒了。创建日期呢? - Matt
这个对我似乎有效,但需要注意:在我的情况下,该作业作为专用的AD用户帐户执行服务和自动化,而我并未以此登录。因此,有必要提供用户名和密码,以便Set-ScheduleTask可以无误完成(并且不会清除存储的凭据)。 - Justin

1

进一步解释@bupmm的回答和@Gup3rSuR4c的相应评论,当设置计划任务时可以设置作者。创建计划任务对象,在任务对象中设置作者,然后注册新的任务对象(参见下面的代码)。

$User = "user"
$Password = "password"
$TaskPath = "<scheduled_task_folder>"

$TaskName = "hello_world"
$TaskDescription = "Run Hello World"
$TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\source_code\scripts\hello_world.ps1"
$TaskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration ([System.TimeSpan]::MaxValue)
$TaskPrincipal = New-ScheduledTaskPrincipal -Id $User -UserId $User -LogonType Password -RunLevel Limited
$Task = New-ScheduledTask -Description $TaskDescription -Action $TaskAction -Principal $TaskPrincipal -Trigger $TaskTrigger
$Task.Author = "Author"
$Task | Register-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -User $User -Password $Password | Out-Null

1

不幸的是,唯一的方法是通过-xml选项。

请注意,该选项需要实际的字符串,而不是文件名。

$xml = @"
....
....
"@
Register-ScheduledTask -Xml $xml -TaskName $task_name

这很糟糕,因为如果我使用 XML,我无法设置当前主体 :( - Ivan Valadares
1
你可以使用Set-ScheduledTask命令来更新它的主体,或者如果我没记错的话,主体可以直接放在XML中。一旦我有时间,我会更新答案并展示它(或更正这个评论)。它肯定在XML模式中。 - mhhollomon
使用 Set-ScheduledTask 命令可以完成此操作,我通过 XML 创建任务,然后使用 Set-ScheduledTask 更新主体。谢谢。 - Ivan Valadares
没有必要使用 -xml 选项。请参见下面的答案 https://dev59.com/HbDla4cB1Zd3GeqP7WSD#71952496 - gerard

0
我正在寻找一种改变现有任务作者的方法,并通过谷歌来到了这里。这可能不是对OP问题最有效的答案,但我会发布它以帮助其他处于我的情况的人。
假设任务已经在任务计划程序中设置好:
$tasks=Get-ScheduledTask |where author -like "<old_author>"

$tasks | Foreach-Object{

    $taskObject=Get-ScheduledTask $_.TaskName
    $taskObject.Author = "<new_author>"
    $taskObject | Set-ScheduledTask -User "<new_username>" -Password "<new_user_password>"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接