2016-09-02 3 views
4

Verfügen Sie über ein Powershell-Skript, mit dem eine geplante Aufgabe für die Bereitstellung über Octopus auf einem Windows 2012-Server erstellt wird.Hinzufügen eines zweiten Auslösers im Aufgabenplan

Function Create-ScheduledTask($TaskName,$RunAsUser,$TaskRun,$Schedule,$StartTime,$StartDate,$Arguments,$RunWithElevatedPermissions,$Days,$Password){ 
    # set up 
    $Command = "schtasks.exe /create /ru `"$RunAsUser`" /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" $cmdSchedule $cmdDays $cmdStartDate $cmdStartTime /F $cmdInterval $cmdDuration $cmdRunLevel $cmdPassword" 

    echo $Command 
    Invoke-Expression $Command    
} 

Der Versuch, einen weiteren Trigger als Teil der gleichen Aufgabenname hinzuzufügen, in der Befehlszeile wird nicht mit schtasks.exe arbeiten, die scheinbar die GUI widerspricht, wo es getan werden kann.

Dies ist die Funktion, die zum Erstellen des Ereignisauslösers verwendet wurde, idealerweise zum Anfügen an dieselbe geplante Aufgabe.

Function Create-ScheduledTaskEvent($TaskName,$RunAsUser,$TaskRun,$Arguments,$RunWithElevatedPermissions,$Password, $xPath, $channelName){ 

    $cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"} 
    $cmdPassword = if([string]::IsNullOrEmpty($Password)){""}else{"/rp `"$Password`""} 
    $cmdXPath = if([string]::IsNullOrEmpty($xPath)){""}else{"/sc ONEVENT /MO `"$xPath`" "} 
    $cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"} 

    $Command = "schtasks.exe /create $cmdRunLevel /ru `"$RunAsUser`" $cmdXPath /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" /ec `"$channelName`" " 

    echo $Command   
    Invoke-Expression $Command    
} 

Ausgabe ist, ersetzt den Schalter /create mit /change beendet nur die vorherige geplante Aufgabe der Trigger/Aktion clobbering auf.

Eine Idee, wie dies über schtasks.exe in der Befehlszeile getan werden kann, um die Trigger zu einem zu kombinieren.

Es könnte durch die Schaffung eines separaten Arbeitsplan mit unterschiedlichen Aufgabenname getan werden, es ist aber nicht ideal, noch ist Aufgabe als XML exportieren und dann in den Import zurück.

Antwort

0

Ich habe ähnliche Aufgabe und eleganteste Lösung, Ich fand heraus, dass ich die Zeitplanaufgabe auf der Testumgebung/dem lokalen PC unter Verwendung der GUI erstellen und als XML exportieren sollte. Kopieren Sie dann den XML-formatierten Text und binden Sie ihn in das Skript ein. Speichern Sie diesen Zeichenfolgenblock nach der Ausführung lokal als XML-Datei und führen Sie die Datei schtasks.exe aus, um die neue Aufgabe zu erstellen.

schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml" 
+0

ist erwähnt hat, dass exportierende/Das Importieren von XML ist nicht ideal. Trotzdem danke. – tombags

+0

Ja, ich säe es. Aber das ist die einzige relativ einfache Implementierung, die ich gefunden habe. Sie können es erweitern und das XML bei Bedarf dynamisch ändern. Wie @Matt fragt, warum Sie den XML-Weg nicht verwenden möchten? – autosvet

0

schtasks.exe können Sie dies nicht über grundlegende Schalter tun. Um dies mit schtasks.exe ausführen zu können, können Sie einen XML-Import einer vorhandenen Aufgabe, as mentioned on SU, verwenden.

Scheduled Tasks GUI

einen Export einer bestehenden Aufgabe Nehmen Sie mit dem Trigger setzen Sie möchten, dass Sie später importieren können. PowerShell kann auch xml-Dateien über die [xml] Umwandlung und Select-XML nativ verstehen. Sie sind also nicht auf statische XML-Dateien beschränkt, sondern können auch Änderungen an bestehenden Dateien vornehmen, wenn Sie dies wünschen.

Je nachdem, welches System Sie von arbeiten, können Sie auch Zugriff auf die Aufgabe Manipulation Cmdlets Powershell haben wie Register-ScheduledTask, die mehr Aufgaben erlaubt konfiguriert werden. Diese finden Sie unter Windows Server 2012 R2 und Windows 8.1. Ziehen einen kleinen Ausschnitt aus TechTarget

$triggers = @() 
$triggers += New-ScheduledTaskTrigger -Daily -At 03:00 
$triggers += New-ScheduledTaskTrigger -Daily -At 09:00 
$triggers += New-ScheduledTaskTrigger -Daily -At 15:00 
$triggers += New-ScheduledTaskTrigger -Daily -At 21:00 

#..... code truncated to only show trigger portion 

$action = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript 
Register-ScheduledTask -TaskName $taskname -Action $action -Trigger $triggers -RunLevel Highest -Description “Test job” 

Seit Sie 2012 hat Sie vielleicht in der Lage, diese Cmdlets in einer PSSession aus Ihrem eigenen System zu laufen, wenn es nicht 8.1

+0

Würde das auch funktionieren, um ein Ereignis hinzuzufügen ?, würde e..g ATaskName eine Aktion haben, die um 1 Uhr morgens läuft, hätte es auch ein Ereignis, das nach einer Ereignis-ID sucht und entsprechend handelt? – tombags

+2

Hmmm ... das entgeht mir. Ich forsche. New-ScheduledTaskTrigger Abdeckung Anmeldung, Start und Zeit ....Es wird jedoch kein Verweis auf Ereignisse angezeigt. – Matt

+0

Fand, dass '/ sc ONEVENT' clobbers jede vorhandene'/sc WOEKLY | DAILY' etc. – tombags

Verwandte Themen