Für die monatliche Inventur stelle ich den Kollegen eine eigene ERP-Datenbank zur Verfügung. Dies geschieht bisher auf Zuruf, an welchem Tag das geschehen soll.
Dann ändern wir die geplante Aufgabe am Server manuell. Die Datenbank dann wird am geforderten Tag morgens bereitgestellt.
Der Termin ist extrem flexibel. Daher läßt sich die geplante Aufgabe (Scheduled Task) nicht mit den vorhandenen Regeln abbilden.
„Jeder 1. des Monats“ oder „jeder erste Montag im Monat“ etc. funktioniert hier nicht.
Ich wollte eine Lösung, die meine Interaktion vermeidet. Controlling sollte selbst in der Lage sein, das Datum einzustellen.
Schon zu Beginn war klar, dass es auf PowerShell, das Commandlet „Set-ScheduledTask“ und eine Textdatei für das Datum hinauslaufen würde. Schon rein deshalb, weil man nicht will, dass Anwender an einem Server umeinanderschaffen.
„Set-ScheduledTask“ nimmt das Datum nur im Format „Monat/Tag/Jahr“ an. (Hinweise, wie das im Format „Tag.Monat.Jahr“ klappt, gern per Kommentarfunktion.)
Es blieben die Möglichkeit das Datum in der Textdatei so zu hinterlegen, wie das Commandlet es erfordert. Oder das gewohnte Format umzuändern.
Da ich die Datumsvorlage möglichst einfach gestalten wollte, habe ich mich für Variante 2 entschieden. Dadurch kann der Anwender auch weniger Fehler machen.
Das Ergebnis als Code-Schnipsel sieht so aus:
$ursprung = Get-Content -Path $dateipfad
$split = $ursprung.Split('.')
$tag = $split[0]
$monat = $split[1]
$jahr = $split[2]
$neuestartzeit = "$monat/$tag/$jahr"
$Startzeit = New-ScheduledTaskTrigger -At "$neuestartzeit 06:30" -Once
Set-ScheduledTask –TaskName $Aufgabenname –Trigger $Startzeit
Nun muß nur noch das gewünschte Datum in der Form „Tag.Monat.Jahr“ in der Textdatei geändert werden.
Das Skript ändert die Startzeit der anderen geplanten Aufgabe. Und versendet eine E-Mail mit dem eingestellten Startdatum an die Kollegen.
(Nicht im Code-Schnipsel enthalten. bg)