none
Script wiederholen RRS feed

  • Frage

  • Hallo.

    Ist es möglich ein Script alle X Minuten ausführen zu lassen, wobei der X Wert aus einer .xml gelesen wird. Quasi frei einstellbar.

    Gruß



    • Bearbeitet Piggeldy Montag, 19. August 2013 09:10
    • Bearbeitet Denniver ReiningMVP, Moderator Montag, 19. August 2013 17:46 Titel geändert. Dies ist das Powershell Forum, kein Prefix notwendig.
    Montag, 19. August 2013 09:03

Antworten

  • Normalerweise macht man so etwas mir dem Windows Scheduler Service  SystemSteuererung -> Verwaltung -> Aufgabenplanung

    Da du die Ausführungszeit aber flexible halten willst kannst du mit Start-Sleep machen

    Wie du XML Daten ausliest weißt du nun!?

    Prototyp:

    # Schleife erstellen die endlos läuft
    # daduch läuft diese PowerShell (Script) ewig!
    While($True) {
    
        [XML]$XMLDaten = Get-Content C:\meine\tolle\XML\Datei.xml
    
        $RootNode = $XMLDaten.DocumentElement
    
        $SekundenWarten = $RootNode.ZeitAuslesenInSekunden # beispiel 30 Sekunden
    
        # Zeit warten 
        Start-Sleep -Seconds $SekundenWarten
        
        # mach hier was
        # z.B. Script starten
        # Das script würde die Zeitschleife blockieren. In PowerShell kann nur eine sache gleichzeitig ablaufen
        # deshalb starte ich das script mit einer neuen PowerShell (Powershell Job würde hier auch gehen!)
        Start-Process powershell.exe -ArgumentList "-file C:\mein\tolles\script.ps1"
    
    }


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Montag, 19. August 2013 10:33 sadsadsa
    • Als Antwort markiert Piggeldy Montag, 19. August 2013 11:41
    • Tag als Antwort aufgehoben Piggeldy Montag, 19. August 2013 11:42
    • Als Antwort markiert Piggeldy Montag, 19. August 2013 11:42
    Montag, 19. August 2013 10:32
  • Grundsätzlich JA!

    In der PowerShell kann man Grundsätzlich aus jeder Funktion ein Script machen und umgekehrt.

    Funktionen müssen erst deklariert werden BEVOR Sie genutzt werden können!

    1. Am Anfang von Script 1 eine leere Funktion definieren :
    Function NameDerFunktion {}

    2. den Text vom Script 2 in die Klammern {} der Funktion einfügen

    3.  Anstatt des aufrufs vom Script 2 die Funktion aufrufen: NameDerFunktion

    4. Fertig!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert Piggeldy Donnerstag, 10. Oktober 2013 09:27
    Donnerstag, 10. Oktober 2013 08:27

Alle Antworten

  • Normalerweise macht man so etwas mir dem Windows Scheduler Service  SystemSteuererung -> Verwaltung -> Aufgabenplanung

    Da du die Ausführungszeit aber flexible halten willst kannst du mit Start-Sleep machen

    Wie du XML Daten ausliest weißt du nun!?

    Prototyp:

    # Schleife erstellen die endlos läuft
    # daduch läuft diese PowerShell (Script) ewig!
    While($True) {
    
        [XML]$XMLDaten = Get-Content C:\meine\tolle\XML\Datei.xml
    
        $RootNode = $XMLDaten.DocumentElement
    
        $SekundenWarten = $RootNode.ZeitAuslesenInSekunden # beispiel 30 Sekunden
    
        # Zeit warten 
        Start-Sleep -Seconds $SekundenWarten
        
        # mach hier was
        # z.B. Script starten
        # Das script würde die Zeitschleife blockieren. In PowerShell kann nur eine sache gleichzeitig ablaufen
        # deshalb starte ich das script mit einer neuen PowerShell (Powershell Job würde hier auch gehen!)
        Start-Process powershell.exe -ArgumentList "-file C:\mein\tolles\script.ps1"
    
    }


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Montag, 19. August 2013 10:33 sadsadsa
    • Als Antwort markiert Piggeldy Montag, 19. August 2013 11:41
    • Tag als Antwort aufgehoben Piggeldy Montag, 19. August 2013 11:42
    • Als Antwort markiert Piggeldy Montag, 19. August 2013 11:42
    Montag, 19. August 2013 10:32
  • Wenn PowerShell V3 zum Einsatz kommt, würde ich einen anderen Ansatz wählen:

    $t = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 1) -At (Get-Date).AddMinutes(1) -RepetitionDuration (New-TimeSpan -Days 1) -Once
    
    Register-ScheduledJob -ScriptBlock { Get-Date } -Name Test1 -Trigger $t
    Der Interval kann ja, wie Peter beschrieben hat, aus einem XML File kommen.


    -Raimund

    Montag, 19. August 2013 13:18
  • Hallo,

    ich muss die Frage nochmal anstoßen.

    Es läuft soweit, nur derzeit ja über zwei Skripte. Wobei das eine das mit dem Intervall aufruft.
    Ich würde dies aber lieber alles in einem Skript haben. Ist dies über eine Funktion möglich?

    Beste Grüße

    Donnerstag, 10. Oktober 2013 08:12
  • Grundsätzlich JA!

    In der PowerShell kann man Grundsätzlich aus jeder Funktion ein Script machen und umgekehrt.

    Funktionen müssen erst deklariert werden BEVOR Sie genutzt werden können!

    1. Am Anfang von Script 1 eine leere Funktion definieren :
    Function NameDerFunktion {}

    2. den Text vom Script 2 in die Klammern {} der Funktion einfügen

    3.  Anstatt des aufrufs vom Script 2 die Funktion aufrufen: NameDerFunktion

    4. Fertig!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert Piggeldy Donnerstag, 10. Oktober 2013 09:27
    Donnerstag, 10. Oktober 2013 08:27
  • Vielen Dank! Klappt super, außer dass ich irgendwie ne Fehlermeldung abfangen muss, dass er nichts mehr übergeben kann, da nichts mehr da ist zum verschieben.
    Donnerstag, 10. Oktober 2013 09:27
  • Fehler finden und erledigen (wenn Möglich) ist immer besser als abfangen!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Donnerstag, 10. Oktober 2013 10:07