如何使用ComObject从计划任务的操作中获取路径

时间:2015-05-07 11:54:53

标签: powershell

我正在尝试使用PowerShell在Windows 2003 Server上提取有关活动计划任务的信息。

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

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

我查看$ tasks的成员,并且有一个Definition属性:

Definition            Property   ITaskDefinition Definition () {get}

我将它分配给另一个变量并查看其上的成员,并看到有一个Actions属性:

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

我将它分配给另一个变量并看到有一个Path属性:

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

实际代码行:

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

这什么都不产生。我如何获得这条路?

我对powershell很新,所以不要对我太熟练。

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

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

但我如何才能获得这条路?

1 个答案:

答案 0 :(得分:1)

路径位于计划任务的xml数据内。从那里提取元素将是一种结构化的方法来获得你需要的东西。

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

我们使用Where-Object子句来查看已启用的任务。然后我们将xml属性转换为[xml]。现在我们可以从actions部分中访问该命令。

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

如果需要,您可以在计算属性中轻松获取此内容。