有没有一种方法可以从 PowerShell 查看所有 ScheduledTask 属性,而无需打开不太用户友好的taskschd.msc:
我成功地使用
New-ScheduledTask
和 Register-ScheduledTask
创建了作业,但我无法查看我在 New-ScheduledTask
中使用的参数,如操作、触发器、主体和设置
以下是我设法得到的:
Get-ScheduledTask -TaskName "test22 BAM-AT" -Verbose
TaskPath TaskName State
-------- -------- -----
\ test22 BAM-AT Ready
Get-ScheduledTaskInfo -TaskName "test22 BAM-AT" -Verbose
LastRunTime : 2/23/2021 1:44:44 PM
LastTaskResult : 0
NextRunTime : 2/23/2021 4:00:00 PM
NumberOfMissedRuns : 0
TaskName : test22 BAM-AT
TaskPath :
PSComputerName :
Cim 基础 ScheduledTasks 模块不会预先公开该级别的详细信息。但是,您可以使用另一个 cmdlet
Export-ScheduledTask
来获取 XML 任务定义并将其像对象一样进行解析。
示例:
$TaskXML = [XML]((Get-ScheduledTask)[0] |Export-ScheduledTask)
$TaskXML.Task.Triggers
显然,您可能需要四处寻找才能提取您想要的信息等......
Export-ScheduledTask
返回在另一个系统上导入任务所需的所有 XML,因此它应该包含所有详细信息,只需提取 XML 即可。
更新地址评论:
我显然没有意识到还有更多信息返回并可从
Get-ScheduledTask
访问。但是,访问该信息不需要 Select-Object
(上面的 select *
)。这样做会使返回的对象脱水,从而可能影响其二次使用。 Select 之后返回的对象是 [PSCustomObjects]
,而不是典型的 [CimInstance]
。
感谢@CraftyB的评论,这里有一些例子,没有不必要的
Select-Object
:
(ScheduledTask -TaskName "test22 BAM-AT").Actions
或:
(ScheduledTask -TaskName "test22 BAM-AT").Triggers
根据需要参考属性。
如果没有更多的工作,我不清楚导出 XML 与仅引用属性相比是否有优点或缺点。一种方法可能提供另一种方法无法提供的信息。
Get-Scheduled 准确地传递了所有信息。所以不需要事先导出XML。属性封装在嵌套对象中。
PS C:\Users\<userName>> Get-ScheduledTask -TaskName TaskName | Select-Object *
State : Ready
Actions : {MSFT_TaskExecAction}
Author : domain\username
Date :
Description : Description
Documentation :
Principal : MSFT_TaskPrincipal2
SecurityDescriptor :
Settings : MSFT_TaskSettings3
Source :
TaskName : TaskName
TaskPath : \
Triggers : {MSFT_TaskTimeTrigger}
URI : \TaskName
Version :
PSComputerName :
CimClass : Root/Microsoft/Windows/TaskScheduler:MSFT_ScheduledTask
CimInstanceProperties : {Actions, Author, Date, Description...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
要获得更好的“可读”格式,一次显示所有属性,您可以使用 ConvertTo-Json commandlet。
Get-ScheduledTask -TaskName TaskName | ConvertTo-Json -Depth 11
当您对计划任务使用深度 11 时,就达到了最大细节级别,但您必须自己证明哪种细节级别对您来说足够。如果您有非常复杂的对象并计划将来重新导入它们,那么您必须非常小心地处理,因为较低的细节级别只是数据的剪切。
出于一般文档目的,公开所有重要细节,深度为 3 就足够了。请不要忽略排除像 cim* 这样命名的属性,因为它们会产生大量“破坏”。
Get-ScheduledTask -TaskName $TaskName | Select-Object -Property * -ExcludeProperty Cim* | ConvertTo-Json -Depth 3