从 powershell 中的计划任务获取更多信息

问题描述 投票:0回答:2

有没有一种方法可以从 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     :
windows powershell scheduled-tasks
2个回答
2
投票

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 与仅引用属性相比是否有优点或缺点。一种方法可能提供另一种方法无法提供的信息。


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.