如何从Powershell访问COM对象的索引属性

Cha*_*lie 7 com powershell

我正在使用Powershell通过任务调度程序2.0接口(例如ITaskDefinition)通过COM与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]
Run Code Online (Sandbox Code Playgroud)

但是,最后一行失败并显示以下消息:

Unable to index into an object of type System.__ComObject.
Run Code Online (Sandbox Code Playgroud)

我在这个主题上尝试过其他一些变化,例如$triggers.Item(0),一切都没有运气.我猜这与$trigger作为COM对象有关,因为我认为索引属性在其他类型上运行良好.

有谁知道这样做的正确方法?

Kei*_*ill 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        : 
Run Code Online (Sandbox Code Playgroud)

如果您不需要通过索引访问,则使用枚举器也可以使用:

foreach ($trigger in $triggers) { $trigger }
Run Code Online (Sandbox Code Playgroud)