2009-11-03 9 views
7

私はpowershellを使用して、Task Scheduler 2.0 interfaces(例:ITaskDefinition)を通じてCOMを介してWindows 7タスクスケジューラサービスと通信しています。私はITaskDefinitionのTriggersコレクションから特定のトリガーを取り出したいと思います。特定のトリガを抽出する適切な方法は、インデックス付きプロパティであるItemプロパティを使用しているようです。PowershellからCOMオブジェクトのインデックス付きプロパティにアクセスする方法

私の最初の試みは、このようなものになります。私は、例えば、このテーマにいくつかの他のバリエーションを試してみた

Unable to index into an object of type System.__ComObject. 

$sched = New-Object -Com "Schedule.Service" 
$sched.Connect() 
$folder = $sched.GetFolder('\') 
$task = $folder.GetTask("some task") 
$triggers = $task.Definition.Triggers 
$trigger = $triggers[0] 

しかし、最後の行は、このメッセージで失敗します$triggers.Item(0)、すべて運がありません。これは、COMオブジェクトである$triggerと関係があります。なぜなら、インデックス付きのプロパティは他の型でうまく動作するからだと思います。

これを行う正しい方法を知っている人はいますか?

答えて

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 } 
+0

ありがとう、これも動作するようです。しかし、誰かがもっと直接的な方法を知っていることをまだ望んでいる。 – Charlie

+0

これは今私を悩ましています。あなたが知っている –

+1

:-)、これと同じに沿って次の点に注意して動作するようです: foreachの($ task.Definition.Triggersで$トリガ){$トリガー} –

3

私のシステムでは、いくつかのタスクに対して1つのトリガーしか返されないようです。配列内に強制的に戻すことを試みるかもしれません。

$sched = New-Object -Com "Schedule.Service" 
$sched.Connect() 
$folder = $sched.GetFolder('\') 
$task = $folder.GetTask("some task") 
$triggers = @($task.Definition.Triggers) 
$trigger = $triggers[0] 
+0

は涼しい、これは良い回避策のように思えます。私は誰かが "適切に"それを行う方法を知っていることを望んでいるが、これは今私を行くだろう。 – Charlie

+0

恐ろしい回避策。私はそれを配列にキャストしようとしていましたが、これはこのようなオブジェクトのためにこれを行う正しい方法です。ありがとう! –

関連する問題