我知道我迟到了,但@Frode F. 提供的答案虽然有效,但在技术上是不正确的。
您可以通过 PowerShell 访问计划任务的 Actions 集合的项目,这并不是很明显。我今天也必须自己弄清楚这一点。
下面是在 PowerShell 中完成所有这些操作的代码,而无需使用 XML:
# I'm assuming that you have a scheduled task object in the variable $task:
$taskAction = $task.Definition.Actions.Item.Invoke(1) # Collections are 1-based
这就是在不使用foreach
.
因为该Actions
属性是一个包含参数化属性的集合Item
(例如,在 C# 中您将编写myTask.Actions[0]
或在 VB 中myTask.Actions.Item(1)
),PowerShell 将Item
属性表示为一个PSParameterizedProperty
对象。要调用与属性关联的方法,请使用Invoke
方法(用于 getter)和InvokeSet
方法(用于 setter)。
我运行了一个运行 OP 代码的快速测试,它对我有用(但是,我正在运行 PowerShell 4.0,所以也许这与它有关):
$schedule = new-object -com("Schedule.Service")
$schedule.connect()
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks | select Name, LastRunTime
foreach ($t in $tasks)
{
foreach ($a in $t.Actions)
{
Write-Host "Task Action Path: $($a.Path)" # This worked
Write-Host "Task Action Working Dir: $($a.workingDirectory)" # This also worked
}
$firstAction = $t.Actions.Item.Invoke(1)
Write-Host "1st Action Path: $($firstAction.Path)"
Write-Host "1st Action Working Dir: $($firstAction.WorkingDirectory)"
}
HTH。