none
new-task logontype <password> RRS feed

  • Frage

  • Hallo, versuche gerade einen Task mit den cmdlets vom PowerShellPack ( http://archive.msdn.microsoft.com/PowerShellPack ) "new-task | add-tasktrigger | add-taskaction | register-scheduledtask" zu erstellen.

    Soweit ok, nur: wie setze ich die Option "Unabhängig von der Benutzeranmeldung ausführen" ("Run whether user is logged on or not") ?

    Bei meiner Script-Zeile wird standardmäßig "Nur ausführen, wenn Benutzer angemeldet ist" im erstellten Tasks gesetzt:

    $secpasswd = ConvertTo-SecureString "PASSWORT" -AsPlainText -Force
    $mycreds = New-Object System.Management.Automation.PSCredential ("DOMÄNE\BENUTZER", $secpasswd)
    new-task -Credential $mycreds | add-tasktrigger -daily -at 08:30 | add-taskaction -path "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -arguments "C:\PSTools\Backups\SCRIPT.ps1" | Register-scheduledtask -name "\Eigene Tasks\Backup\TASKNAME"

    Wenn ich den mit obigen Script erstellten Task exportiere (z.B. xml), steht da unter Principals <LogonType>InteractiveToken</LogonType>, richtig wäre hingegen <LogonType>Password</LogonType> : hier die Exports:

    Export falscher Task (<LogonType>InteractiveToken</LogonType>):

    Status             : Ready
    Name               : testtask2
    Path               : \Eigene Tasks\Backup\testtask2
    State              : 3
    Enabled            : True
    LastRunTime        : 30.12.1899 00:00:00
    LastTaskResult     : 1
    NumberOfMissedRuns : 0
    NextRunTime        : 19.05.2012 08:30:00
    Definition         : System.__ComObject
    Xml                : <?xml version="1.0" encoding="UTF-16"?>
                         <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
                           <RegistrationInfo>
                             <Author>BENUTZER</Author>
                           </RegistrationInfo>
                           <Triggers>
                             <CalendarTrigger>
                               <StartBoundary>2012-05-18T08:30:00</StartBoundary>
                               <Enabled>true</Enabled>
                               <ScheduleByDay>
                                 <DaysInterval>1</DaysInterval>
                               </ScheduleByDay>
                             </CalendarTrigger>
                           </Triggers>
                           <Principals>
                             <Principal id="Author">
                               <RunLevel>LeastPrivilege</RunLevel>
                               <UserId>BENUTZER</UserId>
                               <LogonType>InteractiveToken</LogonType>
                             </Principal>
                           </Principals>
                           <Settings>
                             <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
                             <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
                             <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
                             <AllowHardTerminate>true</AllowHardTerminate>
    
                             <StartWhenAvailable>false</StartWhenAvailable>
                             <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
                             <IdleSettings>
                               <StopOnIdleEnd>true</StopOnIdleEnd>
                               <RestartOnIdle>false</RestartOnIdle>
                             </IdleSettings>
                             <AllowStartOnDemand>true</AllowStartOnDemand>
                             <Enabled>true</Enabled>
                             <Hidden>false</Hidden>
                             <RunOnlyIfIdle>false</RunOnlyIfIdle>
                             <WakeToRun>false</WakeToRun>
                             <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
                             <Priority>6</Priority>
                           </Settings>
                           <Actions Context="Author">
                             <Exec>
                               <Command>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
                               <Arguments>C:\PSTools\Backups\SCRIPT.ps1</Arguments>
                               <WorkingDirectory>C:\PSTools\Backups</WorkingDirectory>
                             </Exec>
                           </Actions>
                         </Task>

    Export richtiger Task (<LogonType>Password</LogonType>):

    Status             : Ready
    Name               : testtask2
    Path               : \Eigene Tasks\Backup\testtask2
    State              : 3
    Enabled            : True
    LastRunTime        : 30.12.1899 00:00:00
    LastTaskResult     : 1
    NumberOfMissedRuns : 0
    NextRunTime        : 19.05.2012 08:30:00
    Definition         : System.__ComObject
    Xml                : <?xml version="1.0" encoding="UTF-16"?>
                         <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
                           <RegistrationInfo>
                             <Author>BENUTZER</Author>
                           </RegistrationInfo>
                           <Triggers>
                             <CalendarTrigger>
                               <StartBoundary>2012-05-18T08:30:00</StartBoundary>
                               <Enabled>true</Enabled>
                               <ScheduleByDay>
                                 <DaysInterval>1</DaysInterval>
                               </ScheduleByDay>
                             </CalendarTrigger>
                           </Triggers>
                           <Principals>
                             <Principal id="Author">
                               <RunLevel>LeastPrivilege</RunLevel>
                               <UserId>BENUTZER</UserId>
                               <LogonType>Password</LogonType>
                             </Principal>
                           </Principals>
                           <Settings>
                             <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
                             <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
                             <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
                             <AllowHardTerminate>true</AllowHardTerminate>
    
                             <StartWhenAvailable>false</StartWhenAvailable>
                             <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
                             <IdleSettings>
                               <StopOnIdleEnd>true</StopOnIdleEnd>
                               <RestartOnIdle>false</RestartOnIdle>
                             </IdleSettings>
                             <AllowStartOnDemand>true</AllowStartOnDemand>
                             <Enabled>true</Enabled>
                             <Hidden>false</Hidden>
                             <RunOnlyIfIdle>false</RunOnlyIfIdle>
                             <WakeToRun>false</WakeToRun>
                             <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
                             <Priority>6</Priority>
                           </Settings>
                           <Actions Context="Author">
                             <Exec>
                               <Command>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
                               <Arguments>C:\PSTools\Backups\SCRIPT.ps1</Arguments>
                               <WorkingDirectory>C:\PSTools\Backups</WorkingDirectory>
                             </Exec>
                           </Actions>
                         </Task>

    Denke mal das muss ich irgendwie bei -Credential (von new-task) "reinbiegen", nur wie ?

    Wie man sieht, bin ich kein richtiger Scripter, nur ein dummer cmdlet-user .. bitte also um Nachsicht ..

    Danke im Voraus für Eure Hilfe

    Freitag, 18. Mai 2012 14:49

Antworten

  • Ansonsten kannst du es auch erst mal mit dem guten alten SCHTASKS versuchen.

    Grüße, Denniver


    Hallo,

    ich habe auch viel herumexperimentiert und irgendwann festgestellt, dass es anscheinend noch keine zufriedenstellenden CmdLets für diese Aufgabe gibt. Schlussendlich bin ich dann auch bei SCHTASKS.EXE gelandet. Dieses Tool bot für mich zwei entscheidende Vorteile:

    1. Es funktioniert auch problemlos remote.
    2. Es ist in der Lage, die XML-Files, die man mit der Aufgabenplanung exportieren kann, wieder zu importieren. So ist es einfach, sich ein Beispiel mit der Aufgabenplanung zu basteln, es zu exportieren, eventuell zu modifizieren und danach wieder auf beliebig vielen Rechnern remote zu importieren.

    SCHTASKS.EXE /End /TN $TaskName /S $ComputerName /U $User /P $Password 2> Out-Null SCHTASKS.EXE /Delete /TN $TaskName /S $ComputerName /U $User /P $Password /F 2> Out-Null SCHTASKS.EXE /Create /TN $TaskName /S $ComputerName /RU $User /RP $Password /XML $ScheduleTaskXMLFile

    • vorsichtshalber beende ich den Task (existiert er nicht, wandert die Fehlermeldung ins Nirwana)
    • vor dem Löschen (s.o.)
    • und anschliessenden Neuerzeugen

    Das $ScheduleTaskXMLFile habe ich vorher als Here-String definiert, um noch ein paar Dinge ändern zu können. Man kann es natürlich auch aus einer Datei einlesen.

    Die Benutzerkennung und das Passwort, unter dem der Task laufen soll, frage ich beim Ablauf des Skripts beim Administrator ab:

    $User = 'Domäne\AdminUser'
    $Credentials = Get-Credential -Credential $User
    $Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Credentials.Password))
    

    • Als Antwort markiert andymolly Montag, 21. Mai 2012 07:30
    Sonntag, 20. Mai 2012 10:02
  • >jedoch unterstützt das keine Unterordner, oder doch ?

    Doch. Z.b.:

    schtasks /create /xml "MeinTask.xml" /tn "MeinOrdner\MeinTask"

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 21. Mai 2012 07:18
    Moderator

Alle Antworten

  • Mhm also nach kurzem Überfliegen des Source-Code der PowershellPack CMDlets, siehts nicht so aus, als würde das erforderliche Objekt "Principal" überhaupt unterstützt. Wenn ich das richtig sehe, unterstützen die CMDlets nur eine einzige Ausführungsmethode, nämlich interaktiven Logon.
     
    Wenn du es dir zutraust, kannst du dir ein Script schreiben, das direkt auf das Scheduler-COM-Object zugreift (nichts anderes machen diese CMDlets), ein Beispiel gäbe es hier.
     
    Ansonsten kannst du es auch erst mal mit dem guten alten SCHTASKS versuchen.

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Samstag, 19. Mai 2012 13:43
    Moderator
  • Ansonsten kannst du es auch erst mal mit dem guten alten SCHTASKS versuchen.

    Grüße, Denniver


    Hallo,

    ich habe auch viel herumexperimentiert und irgendwann festgestellt, dass es anscheinend noch keine zufriedenstellenden CmdLets für diese Aufgabe gibt. Schlussendlich bin ich dann auch bei SCHTASKS.EXE gelandet. Dieses Tool bot für mich zwei entscheidende Vorteile:

    1. Es funktioniert auch problemlos remote.
    2. Es ist in der Lage, die XML-Files, die man mit der Aufgabenplanung exportieren kann, wieder zu importieren. So ist es einfach, sich ein Beispiel mit der Aufgabenplanung zu basteln, es zu exportieren, eventuell zu modifizieren und danach wieder auf beliebig vielen Rechnern remote zu importieren.

    SCHTASKS.EXE /End /TN $TaskName /S $ComputerName /U $User /P $Password 2> Out-Null SCHTASKS.EXE /Delete /TN $TaskName /S $ComputerName /U $User /P $Password /F 2> Out-Null SCHTASKS.EXE /Create /TN $TaskName /S $ComputerName /RU $User /RP $Password /XML $ScheduleTaskXMLFile

    • vorsichtshalber beende ich den Task (existiert er nicht, wandert die Fehlermeldung ins Nirwana)
    • vor dem Löschen (s.o.)
    • und anschliessenden Neuerzeugen

    Das $ScheduleTaskXMLFile habe ich vorher als Here-String definiert, um noch ein paar Dinge ändern zu können. Man kann es natürlich auch aus einer Datei einlesen.

    Die Benutzerkennung und das Passwort, unter dem der Task laufen soll, frage ich beim Ablauf des Skripts beim Administrator ab:

    $User = 'Domäne\AdminUser'
    $Credentials = Get-Credential -Credential $User
    $Password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Credentials.Password))
    

    • Als Antwort markiert andymolly Montag, 21. Mai 2012 07:30
    Sonntag, 20. Mai 2012 10:02
  • Ok .. werd dann wohl nicht um schtask rumkommen, hatte damit eigentlich begonnen .. jedoch unterstützt das keine Unterordner, oder doch ?.. .. werds mal mitn xml ex- und import testen .. 

    Danke an Jens & Denniver

    Montag, 21. Mai 2012 07:06
  • >jedoch unterstützt das keine Unterordner, oder doch ?

    Doch. Z.b.:

    schtasks /create /xml "MeinTask.xml" /tn "MeinOrdner\MeinTask"

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 21. Mai 2012 07:18
    Moderator