Question:
I’m using Powershell to talk to the Windows 7 task scheduler service via COM through the Task Scheduler 2.0 interfaces (e.g. ITaskDefinition). I want to pull out a particular trigger from the Triggers collection on ITaskDefinition. It appears that the proper way to extract a particular trigger is through the Item property, which is an indexed property.
My first try looks something like this:
1 2 3 4 5 6 7 |
$sched = New-Object -Com "Schedule.Service" $sched.Connect() $folder = $sched.GetFolder('\') $task = $folder.GetTask("some task") $triggers = $task.Definition.Triggers $trigger = $triggers[0] |
However, the last line fails with this message:
1 2 |
Unable to index into an object of type System.__ComObject. |
I’ve tried some other variations on this theme, e.g. $triggers.Item(0)
, all with no luck. I’m guessing this has to do with $trigger
being a COM object, because I think indexed properties work fine on other types.
Does anyone know the correct way to do this?
Answer:
Item does work. You have to use Item() instead of Item[] and indices are 1-based.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$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 : |
Using an enumerator also works if you don’t need to access by index:
1 2 |
foreach ($trigger in $triggers) { $trigger } |