Benutzer mit den meisten Antworten
new-task logontype <password>

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
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:
- Es funktioniert auch problemlos remote.
- 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
-
>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".- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 21. Mai 2012 07:37
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".- Bearbeitet Denniver ReiningMVP, Moderator Samstag, 19. Mai 2012 13:47
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Samstag, 19. Mai 2012 22:07
-
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:
- Es funktioniert auch problemlos remote.
- 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
-
>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".- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 21. Mai 2012 07:37