我正在使用Powershell通过COM通过Task Scheduler 2.0 interfaces(例如ITaskDefinition)与Windows 7任务调度程序服务进行通信。我想从ITaskDefinition的Triggers集合中提取一个特定的触发器。似乎提取特定触发器的正确方法是通过Item属性,这是一个索引属性。
我的第一次尝试看起来像这样:
$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$folder = $sched.GetFolder('\')
$task = $folder.GetTask("some task")
$triggers = $task.Definition.Triggers
$trigger = $triggers[0]
但是,最后一行失败并显示以下消息:
Unable to index into an object of type System.__ComObject.
我在这个主题上尝试过其他一些变体,例如: $triggers.Item(0)
,一切都没有运气。我猜这与$trigger
是一个COM对象有关,因为我认为索引属性在其他类型上运行良好。
有谁知道这样做的正确方法?
答案 0 :(得分:7)
项目确实有效。你必须使用Item()而不是Item [],索引是从1开始的。
$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$folder = $sched.GetFolder('\')
$task = $folder.GetTask("Update Bin Dir")
$triggers = $task.Definition.Triggers
$triggers.Item(1)
Type : 2
Id : 67a9fad4-462f-43d9-ab71-6e9b781966e6
Repetition : System.__ComObject
ExecutionTimeLimit :
StartBoundary : 2007-07-02T05:30:00
EndBoundary :
Enabled : True
DaysInterval : 1
RandomDelay :
如果您不需要通过索引访问,则使用枚举器也可以工作:
foreach ($trigger in $triggers) { $trigger }
答案 1 :(得分:3)
在我的系统上,看起来某些任务只返回一个触发器。您可以尝试强制它以数组形式返回。
$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$folder = $sched.GetFolder('\')
$task = $folder.GetTask("some task")
$triggers = @($task.Definition.Triggers)
$trigger = $triggers[0]