none
PowerShell 2.0 - Scheduled Task Properties | Eigenschaften der geplanten Aufgaben RRS feed

  • Frage

  • Hallo,

    ich bin seit gestern an einem PowerShell Skript für meine SharePoint Server 2010 Website, welches Daten hochlädt.
    Da dieses Skript regelmäßig ausgeführt werden muss, habe ich mich für die geplanten Aufgaben von Windows entschieden. (scheduled Task) Nun habe ich die grundlegenden Dinge wie einen Trigger erstellt, und mein Skript wird auch ausgeführt. Allerdings mangelt es an einigen speziellen Eigenschaften, bei denen ich nicht weiß wie ich diese setze. Auch 'googlen' hat mir leider nicht weitergeholfen, da das Netz übersäät mit PowerShell V3 & V4 Beispielen ist, in denen die ganze Angelegenheit bedeutend einfacher zu sein scheint und für meinen Anwendungsfall leider nicht kompatibel ist, da neue Versionen der PowerShell ein höheres Framework nutzen, SharePoint jedoch nur die Version der PowerShell 2.0.

    Die Eigenschaften, welche ich bei meiner Aufgabe via Skript nicht gesetzt bekomme sind:
    - Allgemein -> Konfigurieren für: .. Standardmäßig ist Windows Vista und Server 2008 ausgewählt, ich möchte jedoch Win7
    - Allgemein -> Mit höchsten Privilegien ausführen
    - Trigger -> Erweiterte Einstellungen -> Wiederholen jede: 2 Minuten
    - Einstellungen -> Folgende Regel anwenden falls die Aufgabe bereits ausgeführt wird: Vorhandene Instanz anhalten

    Anbei zur besseren Verständnis mein verwendeter SkriptCode:
    $TaskName = "SkriptAufgabe"
    $TaskCommand = "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe"
    $TaskScript = "C:\local\Skript.ps1"
    $TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
    $TaskStartTime = [datetime]::Now.AddMinutes(1)
    $service = new-object -ComObject("Schedule.Service")
    $service.Connect()
    $rootFolder = $service.GetFolder("\")
    $TaskDefinition = $service.NewTask(0)
    $TaskDefinition.Settings.Enabled = $true
    $TaskDefinition.Settings.AllowDemandStart = $true
    $triggers = $TaskDefinition.Triggers
    $trigger = $triggers.Create(2)
    $trigger.StartBoundary = $TaskStartTime.ToString("yyyy-MM-dd'T'HH:mm:ss")
    $trigger.Enabled = $true
    $Action = $TaskDefinition.Actions.Create(0)
    $action.Path = "$TaskCommand"
    $action.Arguments = "$TaskArg"
    $rootFolder.RegisterTaskDefinition("$TaskName",$TaskDefinition,6,"System",$null,5)

    Vielen Dank im voraus!
    Mfg
    YTMFB



    • Bearbeitet ytmfb Mittwoch, 2. September 2015 08:11
    Mittwoch, 2. September 2015 06:48

Antworten

  • Hallo,

    >> Vielen dank für deinen Lösungsansatz, aber existiert keine Codezeile dafür?

    Du koenntest z.B.: so vorgehen

    - Du baust dir in der UI den Task so wie du ihn haben willst
    - dort kannst Du den dann exportieren
    - das Ergebnis ist eine XML-Datei die du als Vorlage benutzen kannst
    - die kannst Du dann in einem Script nach belieben anpassen
    - und die so geaenderte Datei uebe das genannte Comando wieder importieren.

    Beste Gruesse
    brima

    Mittwoch, 2. September 2015 12:45

Alle Antworten

  • Hi,

    ich schätze, dass Du als Betriebssystem noch Server 2008 verwendest? Da kannst Du schlichtweg Windows 7 nicht auswählen, neuere Betriebssysteme gehen da generell nicht. Das hat aber normalerweise auf ein Skript keine besonderen Auswirkungen, das ist eher für ältere Programme gedacht.

    Und was bedeutet "nicht gesetzt bekomme" - ist die Option ausgegraut/nicht verfügbar oder inwiefern kannst Du sie nicht setzen?


    Gruß

    Ben

    MCSA Windows 8 (.1) MCSA Windows Server 2012 (R2)

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort! Danke! :-)

    Hinweis: Meine Posts werden "wie besehen" ohne jedwede Gewähr bereitgestellt, da menschliche, technische und andere Fehler nicht ausgeschlossen werden können.

    Mittwoch, 2. September 2015 07:14
  • @Ben
    Ich benutze Windows 7 und dachte es wäre relevant für die Aufgabe auch das entsprechende Betriebssystem auszuwählen.

    - "Und was bedeutet "nicht gesetzt bekomme" - ist die Option ausgegraut/nicht verfügbar oder inwiefern kannst Du sie nicht setzen?"

    Es tut mir Leid wenn ich bei meiner Beschreibung zu unpräzise war. Ich weiß nicht welchen Skriptcode ich verwenden muss um diese Eigenschaften zu setzen, "von Hand" über die Benutzeroberfläche ist dies möglich.
    Die höchsten Privilegien lassen sich über das setzen eines Häkchens verteilen, beim Trigger muss man ebenfalls erst einen Haken für die Wiederholungen aktivieren, bevor man die Zeit einstellt. Und bei den Einstellungen für die Regeln die gelten wenn erneut eine Ausgabe ausgeführt wird lässt sich in einem Kontextmenü ein anderer Wert auswählen.
    Diese, nun nur noch 3 relevanten Eigenschaften möchte ich aber nicht über die Aufgabenverwaltung selbst, sondern schon im Skript setzen, bin aber nicht fündig geworden was Skriptcode für PS Version 2 angeht.

    Ich hoffe Unklarheiten beseitigt zu haben.
    MFG
    YTMFB

    Mittwoch, 2. September 2015 07:35
  • Hallo ytmfb,

    get-help *sch*

    gibt dir einen Überblick über alle Cmd'lets mit *sch*

    get-help New-ScheduledJobOption -Online

    Öffnet die Onlinehilfe zum Cmd'let -> Link

    Dort findest du jede Menge Hinweise, auch Beispiele u.a. auch

    einen Verweis auf

    about_scheduled_jobs

    Vielleicht hilft dir das weiter!

    Edit*: about_jobs


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!


    Mittwoch, 2. September 2015 08:51
  • Hallo,
    vielen Dank für deine Antwort.

    2 von meinen 3 Eigenschaften konnte ich so setzen.
    $Principal = $taskDefinition.Principal
    # Principal.RunLevel -- 0 is least privilege, 1 is highest privilege #
    $Principal.RunLevel = 1

    und

    $repetition = $trigger.Repetition
    $repetition.Duration = "P1D"
    $repetition.Interval = "PT1M"

    Ich habe für die dritte Eigenschaft zwar herausgefunden worum es sich handelt und welchen wert diese erhalten muss, leider aber immer noch nicht wie man diesen Wert setzt.
    Es handelt sich dabei um die Eigenschaft "MultipleInstancesPolicyType" bei den Einstellungen (Settings).
    Dieser Wert ist Standardmäßig auf "IgnoreNew" gesetzt, ich möchte ihn aber auf "StopExisting". ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383040(v=vs.85).aspx )

    Ich habe im PowerShell Skript folgendes versucht:
    $TaskDefinition.Settings.MultipleInstancesPolicyType = "StopExisting";
    $TaskDefinition.Settings.MultipleInstancesPolicy = "StopExisting";

    und folgende Fehlermeldung bekommen :

    Die MultipleInstancesPolicyType-Eigenschaft wurde in diesem Objekt nicht gefunden. Stellen Sie sich
    er, dass sie vorhanden ist und festgelegt werden kann.
    + $TaskDefinition.Settings. <<<< MultipleInstancesPolicyType = "StopExisting";
        + FullyQualifiedErrorId : PropertyAssignmentException

    + $TaskDefinition.Settings. <<<< MultipleInstancesPolicy = "StopExisting";
        + FullyQualifiedErrorId : PropertyAssignmentException

    Ich hoffe wir können die letzte Kleinigkeit noch gemeinsam lösen.
    MFG

    YTMFB


    • Bearbeitet ytmfb Mittwoch, 2. September 2015 11:39
    Mittwoch, 2. September 2015 11:36
  • Hallo,

    du kannst auch mit den ComandlineTool SCHTASKS arbeiten, auch in einem PowerShell Script.

    Beste Gruesse
    brima

    SCHTASKS /Create /?

    Mittwoch, 2. September 2015 11:45
  • Vielen dank für deinen Lösungsansatz, aber existiert keine Codezeile dafür?

    Das soll keine Kritik an deinen Lösungsvorschlag sein, allerdings habe ich jetzt gefühlt 99% der benötigten Eigenschaften einheitlich über oben abgebildetes Codesnippet gesetzt und würde nur ungern wegen den letztem Schritt grundlegend neu beginnen.

    MFG
    YTMFB

    Mittwoch, 2. September 2015 12:26
  • Hallo,

    >> Vielen dank für deinen Lösungsansatz, aber existiert keine Codezeile dafür?

    Du koenntest z.B.: so vorgehen

    - Du baust dir in der UI den Task so wie du ihn haben willst
    - dort kannst Du den dann exportieren
    - das Ergebnis ist eine XML-Datei die du als Vorlage benutzen kannst
    - die kannst Du dann in einem Script nach belieben anpassen
    - und die so geaenderte Datei uebe das genannte Comando wieder importieren.

    Beste Gruesse
    brima

    Mittwoch, 2. September 2015 12:45