如何使用ComObject从计划的任务中获取行动



我正在尝试使用PowerShell。

我在线找到了一个有用的脚本,用于通过Windows的更新版本连接到计划的任务:

$sch = New-Object -ComObject("Schedule.Service")
$sch.Connect("10.22.8.54")
$tasks = $sch.GetFolder("").GetTasks(0)

我查看$任务的成员,并且有一个定义属性:

Definition            Property   ITaskDefinition Definition () {get}

我将其分配给另一个变量,并在其中查看成员,并查看有一个动作属性:

Actions          Property   IActionCollection Actions () {get} {set}

我将其分配给另一个变量,并看到有一个路径属性:

Path             Property   string Path () {get} {set}

代码的实际行:

$tasks | %{if ($_.Enabled) {$z=$_.Definition;$y=$z.actions;$y.Path}}

这什么都没有。我如何获得路径?

我是Powershell的新手,所以不要对我太技术。

这有效并显示路径(以及其他信息):

$tasks | %{if ($_.Enabled) {$z=$_.Definition;$z.actions}}

但是我如何获得路径?

该路径位于计划任务的XML数据中。从中提取元素将有一种结构化的方法来获取所需的东西。

$tasks | Where-Object{$_.Enabled} | 
    ForEach-Object{
        ([xml]$_.xml).Task.Actions.Exec.Command
    }

我们使用Where-Object子句仅查看启用任务。然后,我们将xml属性施加为[xml]。现在,我们可以在"操作"部分中访问命令。

您获得的结果可能取决于您要查询的操作系统。这可能解释了我们都得到的结果的差异。

如果需要,您可以在计算的属性中轻松地将其获取。

最新更新