2009-11-03 3 views
7

J'utilise Powershell pour parler au service du planificateur de tâches de Windows 7 via COM à travers le Task Scheduler 2.0 interfaces (par exemple ITaskDefinition). Je veux retirer un déclencheur particulier de la collection Triggers sur ITaskDefinition. Il semble que la méthode correcte pour extraire un déclencheur particulier passe par la propriété Item, qui est une propriété indexée.Comment accéder à une propriété indexée sur un objet COM de Powershell

Mon premier essai ressemble à ceci:

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

Cependant, la dernière ligne échoue avec ce message:

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

J'ai essayé d'autres variations sur ce thème, par exemple $triggers.Item(0), tous sans chance. Je devine que cela a à voir avec $trigger étant un objet COM, parce que je pense que les propriétés indexées fonctionnent bien sur d'autres types.

Est-ce que quelqu'un sait la bonne façon de le faire?

Répondre

7

L'élément fonctionne. Vous devez utiliser Item() au lieu de Item [] et les index sont basés sur 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  : 

L'utilisation d'un recenseur fonctionne également si vous n'avez pas besoin d'accéder par index:

foreach ($trigger in $triggers) { $trigger } 
+0

Merci, cela semble fonctionner aussi. Espérant toujours que quelqu'un connaisse un moyen plus direct, cependant. – Charlie

+0

Oui, ça m'embête maintenant. :-) –

+1

Vous savez, le long de cette même note ce qui suit semble fonctionner: foreach (déclencheur $ en task.Definition.Triggers $) {trigger $} –

3

Sur mon système, on dirait qu'il n'y a qu'un seul déclencheur retourné pour certaines tâches. Vous pourriez essayer de le forcer à retourner dans un tableau.

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

Cool, cela semble être une bonne solution. J'espère que quelqu'un saura comment le faire "correctement", mais cela m'amènera pour le moment. – Charlie

+0

Solution de contournement géniale. J'essayais de le projeter dans un tableau, mais j'ai complètement oublié que c'était la bonne façon de le faire pour des objets comme ceux-là. Merci! –

Questions connexes