2015-09-23 2 views
1

Donc, fondamentalement, j'ai besoin d'obtenir les détails du déclencheur associés à une tâche qui est créée dans le planificateur de tâches. enter image description hereComment obtenir les détails du déclencheur associés à une tâche dans le planificateur de tâches à partir de powershell

Donc, fondamentalement, je veux que ces informations que je vais régler dans cette fenêtre de déclenchement telle que sa durée de travail quotidienne ou hebdomadaire et répéter ainsi que pour une durée de etc.

En ce moment am capable d'obtenir les informations suivantes.

Name   : LastTaskResult 
Value   : 0 
CimType   : UInt32 
Flags   : Property, ReadOnly, NotModified 
IsValueModified : False 

Name   : NextRunTime 
Value   : 23-09-2015 11:26:56 
CimType   : DateTime 
Flags   : Property, ReadOnly, NotModified 
IsValueModified : False 

Name   : NumberOfMissedRuns 
Value   : 0 
CimType   : UInt32 
Flags   : Property, ReadOnly, NotModified 
IsValueModified : False 

Name   : TaskName 
Value   : test_Task 
CimType   : String 
Flags   : Property, Key, NotModified 
IsValueModified : False 

Name   : TaskPath 
Value   : 
CimType   : String 
Flags   : Property, Key, NotModified, NullValue 
IsValueModified : False 

Donc, mon exigence est d'avoir deux serveurs. L'un est primaire et l'autre est de sauvegarde. J'ai planifié les tâches dans les serveurs primaires et périodiquement en miroir (robocopy) ces tâches au serveur de sauvegarde qui fonctionne absolument bien. Mais quand je change les détails du déclencheur ou les arguments dans l'onglet action il n'apparaît pas dans le serveur de sauvegarde comme je vérifie juste le nom de tâche est déjà présent ou pas dans le serveur de secours, sinon je crée ces tâches. Il est donc possible de vérifier les détails concernant le déclencheur (quotidien ou hebdomadaire, détails de répétition) ou l'action (détails du script et des arguments) afin que je puisse mettre à jour les tâches en conséquence sur mon serveur secondaire.

Répondre

0

Je pense que ce dont vous avez besoin est "fondamentalement";) une fonction d'exportation/importation de vos tâches.
Voici un exemple de code:

#connect to scheduler of you master server 
$sch = New-Object -ComObject("Schedule.Service") 
$sch.connect("$computername") 

$root=$sch.GetFolder("\") 
$folder =$sch.GetFolder("\subfolder") #if you tasks are defined in a subfolder 

#Export all tasks in the subfoder to $path folder in xml format 
$folder.getTasks(0) | % { 
    $path="c:\temp\tasks\$($_.name).xml" 
    New-Item -ItemType file -Path $path 
    Set-Content -Path $path -Value $_.xml 
} 


#connect to scheduler of you backup server 
$sch.connect("$backupcomputername") 
$folder =$sch.GetFolder("\subfolder") 

#import .xml from $task_path 
$cred=get-credential # will ask for the credential of the user who run the tasks 
Get-childItem -path $task_path -Filter *.xml | %{ 
    $task_name = $_.Name.Replace('.xml', '') 
    $task_xml = Get-Content $_.FullName 
    $task = $sch.NewTask($null) 
    $task.XmlText = $task_xml 
    $folder.RegisterTaskDefinition($task_name, $task, 6, $cred.UserName, $cred.GetNetworkCredential().password, 1, $null) 
} 
+0

ouais, j'ai déjà implémenté ceci, le problème survient quand je mets à jour le trigger dans le serveur primaire, puis après l'importation je dois juste vérifier si des changements dans les détails du déclencheur seulement je dois l'importer –

+0

J'espère que vous avez obtenu mon point –

+0

Je ne suis pas ... pourquoi ne pas exporter/importer toutes les tâches après toute modification?le xml exporté contient les détails des déclencheurs –

1

Est-ce quelque chose comme ça ce que vous recherchez:

$task = Get-ScheduledTask -TaskName "Adobe Flash Player Updater" 
$taskTrigger = $task.Triggers[0] 

$taskTrigger 

Il devrait vous donner une sortie similaire à:

Enabled   : True 
EndBoundary  : 
ExecutionTimeLimit : 
Id     : 
Repetition   : MSFT_TaskRepetitionPattern 
StartBoundary  : 2000-01-01T09:58:00+09:30 
DaysInterval  : 1 
RandomDelay  : 
PSComputerName  : 

Edit: Une autre façon de le faire, en utilisant une connexion ComObject à la place

Vous pouvez le faire quelque chose comme ceci:

$taskService = New-Object -ComObject "Schedule.Service" 
$taskService.Connect($env:COMPUTERNAME) 

$rootTaskFolder = $taskService.GetFolder("\") 
$task = $rootTaskFolder.GetTask("Adobe Flash Player Updater") 
$task 

Ceci retournera la définition de la tâche. Vous pouvez ensuite utiliser Compare-Object pour voir si c'est la même chose sur le serveur de sauvegarde et, dans le cas contraire, exporter/importer la tâche.

Si vous voulez analyser le XML que vous pourriez faire quelque chose comme:

$parsedXML = [xml]$task.xml 

Vous pouvez alors comparer les déclencheurs par actions quelque chose comme:

Compare-Object -DifferenceObject $remoteServerParsedXML.GetElementsByTagName("Triggers") -ReferenceObject $parsedXML.GetElementsByTagName("Triggers") 

Est-ce que se rapprocher de ce que vous essayez atteindre?

+0

Notez que cette applet de commande est uniquement disponible pour Windows 2012+ ou des fenêtres 8.1+ –

+0

exécution de la requête, il ne fournit que: - Activé: True endboundary: ExecutionTimeLimit: Id : Répétition: MSFT_TaskRepetitionPattern StartBoundary: Délai: StateChange: 3 UserId: PSComputerName: –

+0

il n'a pas prvide que ce soit hebdomadaire ou quotidienne et le temps de repeatation etc –