timo0o
Goto Top

Aufgabenplanung: Powershell-Skript - Eigene Aufgabe bearbeiten

Hallo in die Runde.

Ich stehe vor einem Problem und hoffe ihr könnt mir helfen face-smile

Ich habe eine automatisch, durch ein Programm, erstellte Aufgabe, welche ein Powershell-Skript ausführt. Die Aufgabe wird durch ein Online-Skriptrepository erstellt, wo das Skript auch aktualisiert wird.

Leider bietet das Programm keine Möglichkeit, den Trigger der Aufgabe zB auf "Bei Systemstart" zu erstellen, sondern nur zu einem festen oder wiederkehrendem Zeitpunkt.
Ich brauche das Skript aber zwingend mit dem Trigger "Bei Systemstart (zzgl 5Min Verzögerung)...
Aktuell bearbeite ich das Skript per Hand und ändere den Trigger... das ist bei der Vielzahl an Servern jedoch echt Mühselig...

Frage:
Gibt es eine Möglichkeit, wie sich das Powershell-Skript von der Aufgabe selber bei der einmaligen Ausführung ändert und den Trigger der Aufgabe auf "Bei Systemstart" ändert? Irgendwie durch ne Instanz-ID oder sowas?
Dadurch müsste ich die Aufgabe ja nur einmalig in der Zukunft ausführen lassen und die Skripte übernehmen die Anpassung, die ich sonst überall wieder händisch machen müsste.

Ich weiß, es gibt den Befehl "Get-ScheduledTask", Problem hierbei ist jedoch auch, dass das Skript eine zufällige GUID als Namen hat und in dem Ordner, wo das Skript liegt, mehrere vorhanden sind, deshalb kann ich nicht danach suchen. face-sad


Den Hintergrund dafür zu erklären dauert zu lange ... daher bitte ich euch, mögliche Antworten auf meine Frage zu beschränken und nicht, warum die Aufgabe mit dem Programm erstellt wird, und wieso das und jenes.... etc. Es ist halt so und gibt derzeit keine andere Möglichkeit und ich weiß, das es sicher bessere Möglichkeiten gibt. Aber vielleicht kann man es ja automatisieren.
Ansonsten muss ich es halt weiter per Hand machen...

Danke!

Content-ID: 3190084927

Url: https://administrator.de/contentid/3190084927

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Doskias
Doskias 27.06.2022 um 13:14:11 Uhr
Goto Top
Moin,

Zitat von @Timo0o:
Ich habe eine automatisch, durch ein Programm, erstellte Aufgabe, welche ein Powershell-Skript ausführt. Die Aufgabe wird durch ein Online-Skriptrepository erstellt, wo das Skript auch aktualisiert wird.
Soweit noch ok.

Leider bietet das Programm keine Möglichkeit, den Trigger der Aufgabe zB auf "Bei Systemstart" zu erstellen, sondern nur zu einem festen oder wiederkehrendem Zeitpunkt.
Ich brauche das Skript aber zwingend mit dem Trigger "Bei Systemstart (zzgl 5Min Verzögerung)...
Aktuell bearbeite ich das Skript per Hand und ändere den Trigger... das ist bei der Vielzahl an Servern jedoch echt Mühselig...
Ok, wieso wird die geplante Aufgabe für das Skript über die online-Skriptrepository verteilt? Wieso nutzt du nicht die Aufgabenplanung via GPO?

Frage:
Gibt es eine Möglichkeit, wie sich das Powershell-Skript von der Aufgabe selber bei der einmaligen Ausführung ändert und den Trigger der Aufgabe auf "Bei Systemstart" ändert? Irgendwie durch ne Instanz-ID oder sowas?
Dadurch müsste ich die Aufgabe ja nur einmalig in der Zukunft ausführen lassen und die Skripte übernehmen die Anpassung, die ich sonst überall wieder händisch machen müsste.

Ich weiß, es gibt den Befehl "Get-ScheduledTask", Problem hierbei ist jedoch auch, dass das Skript eine zufällige GUID als Namen hat und in dem Ordner, wo das Skript liegt, mehrere vorhanden sind, deshalb kann ich nicht danach suchen. face-sad
Der zufällige GUID-Name könnte bei get-scheduledTask egal sein, wenn du die abfrage richtig schreibst. Aber wir wissen nicht ob es ggf. andere Aufgaben gibt, die einen ähnlichen Namen haben. Und darüber hinaus ist get-scheduledTask definitiv der falsche Befehl für dich. Überleg einfach mal was get bedeutet face-wink

Schau mal hier:
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/?view= ...

ich würde es mit new-scheduledtasktrigger versuchen.

Gruß
Doskias
emeriks
emeriks 27.06.2022 aktualisiert um 13:16:15 Uhr
Goto Top
Hi,
Zitat von @Timo0o:
Ich weiß, es gibt den Befehl "Get-ScheduledTask", Problem hierbei ist jedoch auch, dass das Skript eine zufällige GUID als Namen hat und in dem Ordner, wo das Skript liegt, mehrere vorhanden sind, deshalb kann ich nicht danach suchen. face-sad
Wieso nicht? Das PS-Script kann doch seinen eigenen Namen auslesen.

E.

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$ScriptName = $script:MyInvocation.MyCommand.Name
MrCount
MrCount 27.06.2022 aktualisiert um 13:31:01 Uhr
Goto Top
Servus,

mit
Get-ScheduledTask -TaskPath "\" | ForEach-Object {  
    if ($_.Actions.Arguments -like '*.ps1*') {  
    	Write-Host 'Found', $_.TaskName  
    }
}

kannst du dir Details anzeigen lassen und darin entsprechend suchen, z.B. nach einem Scriptnamen...

Siehe auch: https://www.stevefenton.co.uk/2022/01/a-powershell-script-to-find-an-run ...
Timo0o
Timo0o 28.06.2022 um 08:34:49 Uhr
Goto Top
Zitat von @Doskias:
Leider bietet das Programm keine Möglichkeit, den Trigger der Aufgabe zB auf "Bei Systemstart" zu erstellen, sondern nur zu einem festen oder wiederkehrendem Zeitpunkt.
Ich brauche das Skript aber zwingend mit dem Trigger "Bei Systemstart (zzgl 5Min Verzögerung)...
Aktuell bearbeite ich das Skript per Hand und ändere den Trigger... das ist bei der Vielzahl an Servern jedoch echt Mühselig...
Ok, wieso wird die geplante Aufgabe für das Skript über die online-Skriptrepository verteilt? Wieso nutzt du nicht die Aufgabenplanung via GPO?

Wir machen das mittels der Monitoringsoftware "ServerEye" auf über 1000 Systemen bei knapp 100 Kunden. Per GPO wäre bei der Vielzahl an Kunden schlicht zu viel Arbeit, daher wollte ich die Möglichkeit prüfen, wie man die Aufgabe per Skript ändern kann, die in dieser ausgeführt wird.

Zitat von @Doskias:
Der zufällige GUID-Name könnte bei get-scheduledTask egal sein, wenn du die abfrage richtig schreibst. Aber wir wissen nicht ob es ggf. andere Aufgaben gibt, die einen ähnlichen Namen haben. Und darüber hinaus ist get-scheduledTask definitiv der falsche Befehl für dich. Überleg einfach mal was get bedeutet face-wink

Mit "Get" wollte ich den Namen ja auslesen, daher dachte ich, der sei passend. Es gibt leider andere Aufgaben auch mit einer GUID als Namen, die 1:1 identisch aufgebaut sind, wo aber ein anderes PS-Skript hinter liegt. Daher wird das wohl zu schwer...

Zitat von @MrCount:
Get-ScheduledTask -TaskPath "\" | ForEach-Object {  
    if ($_.Actions.Arguments -like '*.ps1*') {  
    	Write-Host 'Found', $_.TaskName  
    }
}

kannst du dir Details anzeigen lassen und darin entsprechend suchen, z.B. nach einem Scriptnamen...

Siehe auch: https://www.stevefenton.co.uk/2022/01/a-powershell-script-to-find-an-run ...

An sich ja gut, leider kann ich aber nicht nach dem Skriptnamen suchen, da ich diesen nicht kenne (zufällige GUID) face-sad


Zitat von @emeriks:
Wieso nicht? Das PS-Script kann doch seinen eigenen Namen auslesen.
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$ScriptName = $script:MyInvocation.MyCommand.Name

Klar kann es das... der Skriptname ist aber nicht das, was ich suche. Sondern der Name der Aufgabe, da ich ja dessen Trigger ändern möchte, durch das Skript, was durch diese Aufgabe ausgeführt wird.

Ich glaube der Aufwand wird zu viel... da setz ich den Azubi wieder dran, die Aufgaben eben Händisch zu ändern face-smile
MrCount
MrCount 28.06.2022 um 09:26:42 Uhr
Goto Top
Zitat von @Timo0o:

Zitat von @MrCount:
Get-ScheduledTask -TaskPath "\" | ForEach-Object {  
    if ($_.Actions.Arguments -like '*.ps1*') {  
    	Write-Host 'Found', $_.TaskName  
    }
}

kannst du dir Details anzeigen lassen und darin entsprechend suchen, z.B. nach einem Scriptnamen...

Siehe auch: https://www.stevefenton.co.uk/2022/01/a-powershell-script-to-find-an-run ...

An sich ja gut, leider kann ich aber nicht nach dem Skriptnamen suchen, da ich diesen nicht kenne (zufällige GUID) face-sad

Ich dachte, dass die Aufgabe (also im Taskplaner) nur eine zufällige GUID als Namen hat, und das Powershell-Script, welches in dieser Aufgabe ausgeführt wird, immer gleich wäre...
Doskias
Lösung Doskias 28.06.2022 aktualisiert um 09:37:17 Uhr
Goto Top
Moin

Zitat von @Timo0o:
Ich glaube der Aufwand wird zu viel... da setz ich den Azubi wieder dran, die Aufgaben eben Händisch zu ändern face-smile

Gib deinem Azubi lieber Zeit sich mit Powershell auseinanderzusetzen, wenn dir die zeit fehlt. @MrCount hat dir ja schon den nächsten Hinweis gegeben, wie du an den Tasknamen kommst. Kombiniere das mit dem was @emeriks geschrieben hat und dein Skript sagt dir unter welchen Aufgabennamen es läuft. Nutze den Aufgabennamen um mit new-SchedduledTaskTricker (siehe hier) einen Trigger mit AtStartup hinzuzufügen.

Ein Azubi ist da um zu lernen und nicht um dir deine Aufgaben auf die du keine Lust hast (und/oder wo dir keine Lösung zu einfällt) abzunehmen.

Grade wenn es, wie es scheint, eine wiederkehrende Aufgabe ist wird der Aufwand es zu automatisieren deutlich geringer sein als der Aufwand es immer wieder anzupassen.

Gruß
Doskias
erikro
erikro 28.06.2022 um 12:26:38 Uhr
Goto Top
Moin,

Zitat von @Doskias:
Ein Azubi ist da um zu lernen und nicht um dir deine Aufgaben auf die du keine Lust hast (und/oder wo dir keine Lösung zu einfällt) abzunehmen.

Genau! Gib dem Azubi die hier gesammelten Infos und die Aufgabe, das Skript dahingehend zu ändern. face-wink

Liebe Grüße

Erik