none
Script erstellt nicht eine Aufgabe wie vorausgesetzt RRS feed

  • Frage

  • Hallo zusammen

    Ich habe hier ein Script, mit dem man eigentlich eine Aufgabe erstellen kann.
    Script 

     $taskName = Read-Host "Name"
        $user = "username"
        $password = "username"
        $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
        
        $trigger = {
        if ($time -contains "daily") {
        New-ScheduledTaskTrigger -Daily  -AT $clock -DaysOfWeek $day
        $settings = New-ScheduledTaskSettingsSet 
        $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
        Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password }
    
        elseif ($time -contains "weekly") {
        New-ScheduledTaskTrigger -Weekly  -AT $clock -DaysOfWeek $day
        $settings = New-ScheduledTaskSettingsSet 
        $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
        Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password } 
    
        elseif ($time -contains "monthly") {
        New-ScheduledTaskTrigger -Monthly  -AT $clock -DaysOfWeek $day
        $settings = New-ScheduledTaskSettingsSet 
        $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
        Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password
        }
        }

    Doch unglücklicherweise geht es nicht. Weiss jemand wieso?



    Freitag, 3. Februar 2017 14:29

Antworten

  • Hi,

    die Variable $trigger wird mit Hilfe der Variablen $time befüllt, diese Variable ist aber leer, somit laufen deine IF/ELSEIF-Bedigungen alle auf $False, womit der Task also nicht erzeugt wird, weil keiner der drei Bedingungsblöcke ausgeführt wird, weil die ein $True erwarten.

    Beste Gruesse
    brima



    Freitag, 3. Februar 2017 14:38
  • Hallo brima

    Die ist eben nicht leer, da noch die Variable $date von einem anderen Skript geholt wird, welche jedoch zu gross ist um diese zu posten.



    Freitag, 3. Februar 2017 15:30
  • Hi,

    wir können hier nur das beurteilen was wir sehen, dann gib mal die Variable $Time for der Zeile  $trigger = { aus um zu sehen ob wirklich das drin steht was erwartet wird.

    Beste Gruesse
    brima

    Freitag, 3. Februar 2017 15:41
  • Hallo,

    was mir noch auffällt, ist halt schwer zu beurteilen wenn man nicht alles sieht.

    Was willst du eigenlich mit dem Teil  $trigger = {   ... } erreichen, damit weist Du dem Code dazwischen der Varaibalen $Trigger zu, der wird aber nicht aufgeführt(!), was erkärt dass kein Task angelegt wird.

    Also lass mal $trigger = { und die letzte } weg.

    Oder nutzt du die Variable später als CodeBlock?

    Beste Gruesse
    brima

    P.S.: Ein Hinweis dass du die selbe Frage hier Click schon mal gestellt hast wäre auch nett gewesen.
    Freitag, 3. Februar 2017 16:03
  • Hallo brima

    Im vorherigen Script hat der User 3 Möglichkeiten auszuwählen, in welchem Rhythmus er das Script laufen soll.

    Die Variablen heissen so:
    $button_daily
    $button_weekly
    $button_monthly

    Diese habe ich dann unter dem Parameter $time wie folgt gespeichert:

    $time $button_daily.Text $button_weekly.Text $button_monthly.Text

    Ich habe das .Text gewählt, da ich ja den Wert davon möchte.

    Dieser Parameter "$time" ist dann ganz oben beim Skript param($time).

    Wenn du möchtest kann ich dir das Skript per Mail senden, da es zu lange ist.



    Samstag, 4. Februar 2017 10:14
  • Hi,

    meinen anderen Beitrag zu dem Thema $trigger hast Du anscheinend noch nicht gelesen.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 11:56
  • Das Trigger kommt vom folgenden Skript, der es ermöglicht einen Task zu erstellen, also auslassen kann ich ihn nicht.

    $psexe = Join-Path $PSHOME powershell.exe
    $action = New-ScheduledTaskAction -Execute $psexe -Argument '-command  "Get-ChildItem | Out-File tasktest.txt"'
    #$action = New-ScheduledTaskAction -Execute $psexe -Argument "-file d:\test\myscript.ps1"
    $trigger = New-ScheduledTaskTrigger -AT '13:00' -Weekly -DaysOfWeek 1, 2, 3
    $task = New-ScheduledTask -Action $action -Trigger $trigger
    $task | Register-ScheduledTask -TaskName MyTestTaskas
    Get-ScheduledTask MyTestTaskas


    Samstag, 4. Februar 2017 12:19
  • Hallo,

    ich glaube Du willst oder kannst es nicht verstehen.

    Der Code den du jetzt gepostet hast ist ein Beispiel wie man einen Task anlegt.

    Das sollte auch funktionieren, wenn ich dass jetzt auf den Code vom Ursprungspost übertrage machst Du genau folgendes:

    $Trigger = {
    	$psexe = Join-Path $PSHOME powershell.exe
    	$action = New-ScheduledTaskAction -Execute $psexe -Argument '-command  "Get-ChildItem | Out-File tasktest.txt"'
    	#$action = New-ScheduledTaskAction -Execute $psexe -Argument "-file d:\test\myscript.ps1"
    	$trigger = New-ScheduledTaskTrigger -AT '13:00' -Weekly -DaysOfWeek 1, 2, 3
    	$task = New-ScheduledTask -Action $action -Trigger $trigger
    	$task | Register-ScheduledTask -TaskName MyTestTaskas
    	Get-ScheduledTask MyTestTaskas
    }

    Damit wird nun aber kein Task mehr angelegt, sondern der Code wird der Variablen $Trigger zugewiesen, d.h. die Variable ist jetzt vom Typ

    System.Management.Automation.ScriptBlock

    In dem CodeBlock verwendest Du die Variable $Trigger auch, dort wäre sie dann aber vom Typ

    Microsoft.Management.Infrastructure.CimInstance#Root/Microsoft/Windows/TaskScheduler/MSFT_TaskWeeklyTrigger

    Also am beste gehst Du jetzt einfach mal hin kopierst den Code aus diesem Beitrag in eine PowerShelle Console und siehst dir danach die Variable $Trigger an.

    Dann solltest Du den Code wieder sehen.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 12:43
  • Hallo,

    ja, und wie es dir schon im englischen Forum mehrmals mitgeteilt wurde, du solltest dich zu erst mit den Grundlagen beschäftigen.

    Gehen wir mal weg von der ganzen Komplexität und nehmen an du willst folgenden Text ausgeben.

    Ich lerne jetzt das Scripten mit der Powershell.

    Das könnte man so machen:

    Write-Host -Object 'Ich lerne jetzt das Scripten mit der Powershell.'

    Näher an deinem Code so.

    $Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    Write-Host -Object $Trigger

    Bei beiden Lösungen wird der Text >Ich lerne jetzt das Scripten mit der Powershell.<ausgegeben.

    Du machst aber folgendes:

    $Trigger = {
    	$Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    	Write-Host -Object $Trigger
    }

    Jetzt wird aber nicht mehr der Text ausgegeben sondern gar nicht. Wir haben damit nur die Variable $Trigger mit einem ScripBlock befüllt. Einfach die Variable $Trigger ausgeben und dann siehtst Du das, den Code den du eigentlich ausführen wolltest.

    $Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    Write-Host -Object $Trigger

    Die Variable enthält also den Code.

    Den kann man dann so ausführen.

    & $Trigger

    Und schon ist die Ausgabe des Textes wieder erfolgt.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 13:06
  • Was genau kommt denn für eine Fehlermeldung? Warum nutzt Du wenn Du schon mit Buttons arbeitest nicht das Button.Add_Click-Event?

    Dann sparst Du Dir die ganze If-Abfrage.

    Bspw.:

    $ButtonDaily.Add_Click(
    {
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Daily  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password
    }
    )



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)




    Freitag, 10. Februar 2017 09:08

Alle Antworten

  • Hi,

    die Variable $trigger wird mit Hilfe der Variablen $time befüllt, diese Variable ist aber leer, somit laufen deine IF/ELSEIF-Bedigungen alle auf $False, womit der Task also nicht erzeugt wird, weil keiner der drei Bedingungsblöcke ausgeführt wird, weil die ein $True erwarten.

    Beste Gruesse
    brima



    Freitag, 3. Februar 2017 14:38
  • Hallo brima

    Die ist eben nicht leer, da noch die Variable $date von einem anderen Skript geholt wird, welche jedoch zu gross ist um diese zu posten.



    Freitag, 3. Februar 2017 15:30
  • Hi,

    wir können hier nur das beurteilen was wir sehen, dann gib mal die Variable $Time for der Zeile  $trigger = { aus um zu sehen ob wirklich das drin steht was erwartet wird.

    Beste Gruesse
    brima

    Freitag, 3. Februar 2017 15:41
  • Hallo,

    was mir noch auffällt, ist halt schwer zu beurteilen wenn man nicht alles sieht.

    Was willst du eigenlich mit dem Teil  $trigger = {   ... } erreichen, damit weist Du dem Code dazwischen der Varaibalen $Trigger zu, der wird aber nicht aufgeführt(!), was erkärt dass kein Task angelegt wird.

    Also lass mal $trigger = { und die letzte } weg.

    Oder nutzt du die Variable später als CodeBlock?

    Beste Gruesse
    brima

    P.S.: Ein Hinweis dass du die selbe Frage hier Click schon mal gestellt hast wäre auch nett gewesen.
    Freitag, 3. Februar 2017 16:03
  • Hallo brima

    Im vorherigen Script hat der User 3 Möglichkeiten auszuwählen, in welchem Rhythmus er das Script laufen soll.

    Die Variablen heissen so:
    $button_daily
    $button_weekly
    $button_monthly

    Diese habe ich dann unter dem Parameter $time wie folgt gespeichert:

    $time $button_daily.Text $button_weekly.Text $button_monthly.Text

    Ich habe das .Text gewählt, da ich ja den Wert davon möchte.

    Dieser Parameter "$time" ist dann ganz oben beim Skript param($time).

    Wenn du möchtest kann ich dir das Skript per Mail senden, da es zu lange ist.



    Samstag, 4. Februar 2017 10:14
  • Hi,

    meinen anderen Beitrag zu dem Thema $trigger hast Du anscheinend noch nicht gelesen.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 11:56
  • Das Trigger kommt vom folgenden Skript, der es ermöglicht einen Task zu erstellen, also auslassen kann ich ihn nicht.

    $psexe = Join-Path $PSHOME powershell.exe
    $action = New-ScheduledTaskAction -Execute $psexe -Argument '-command  "Get-ChildItem | Out-File tasktest.txt"'
    #$action = New-ScheduledTaskAction -Execute $psexe -Argument "-file d:\test\myscript.ps1"
    $trigger = New-ScheduledTaskTrigger -AT '13:00' -Weekly -DaysOfWeek 1, 2, 3
    $task = New-ScheduledTask -Action $action -Trigger $trigger
    $task | Register-ScheduledTask -TaskName MyTestTaskas
    Get-ScheduledTask MyTestTaskas


    Samstag, 4. Februar 2017 12:19
  • Hallo,

    ich glaube Du willst oder kannst es nicht verstehen.

    Der Code den du jetzt gepostet hast ist ein Beispiel wie man einen Task anlegt.

    Das sollte auch funktionieren, wenn ich dass jetzt auf den Code vom Ursprungspost übertrage machst Du genau folgendes:

    $Trigger = {
    	$psexe = Join-Path $PSHOME powershell.exe
    	$action = New-ScheduledTaskAction -Execute $psexe -Argument '-command  "Get-ChildItem | Out-File tasktest.txt"'
    	#$action = New-ScheduledTaskAction -Execute $psexe -Argument "-file d:\test\myscript.ps1"
    	$trigger = New-ScheduledTaskTrigger -AT '13:00' -Weekly -DaysOfWeek 1, 2, 3
    	$task = New-ScheduledTask -Action $action -Trigger $trigger
    	$task | Register-ScheduledTask -TaskName MyTestTaskas
    	Get-ScheduledTask MyTestTaskas
    }

    Damit wird nun aber kein Task mehr angelegt, sondern der Code wird der Variablen $Trigger zugewiesen, d.h. die Variable ist jetzt vom Typ

    System.Management.Automation.ScriptBlock

    In dem CodeBlock verwendest Du die Variable $Trigger auch, dort wäre sie dann aber vom Typ

    Microsoft.Management.Infrastructure.CimInstance#Root/Microsoft/Windows/TaskScheduler/MSFT_TaskWeeklyTrigger

    Also am beste gehst Du jetzt einfach mal hin kopierst den Code aus diesem Beitrag in eine PowerShelle Console und siehst dir danach die Variable $Trigger an.

    Dann solltest Du den Code wieder sehen.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 12:43
  • Ich verstehe nicht was du meinst.

    Heisst das, es ist nicht möglich es so zu scripten, wie ich es mir vorstelle?

    Sorry für die Fragerei


    Samstag, 4. Februar 2017 12:47
  • Hallo,

    ja, und wie es dir schon im englischen Forum mehrmals mitgeteilt wurde, du solltest dich zu erst mit den Grundlagen beschäftigen.

    Gehen wir mal weg von der ganzen Komplexität und nehmen an du willst folgenden Text ausgeben.

    Ich lerne jetzt das Scripten mit der Powershell.

    Das könnte man so machen:

    Write-Host -Object 'Ich lerne jetzt das Scripten mit der Powershell.'

    Näher an deinem Code so.

    $Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    Write-Host -Object $Trigger

    Bei beiden Lösungen wird der Text >Ich lerne jetzt das Scripten mit der Powershell.<ausgegeben.

    Du machst aber folgendes:

    $Trigger = {
    	$Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    	Write-Host -Object $Trigger
    }

    Jetzt wird aber nicht mehr der Text ausgegeben sondern gar nicht. Wir haben damit nur die Variable $Trigger mit einem ScripBlock befüllt. Einfach die Variable $Trigger ausgeben und dann siehtst Du das, den Code den du eigentlich ausführen wolltest.

    $Trigger = 'Ich lerne jetzt das Scripten mit der Powershell.'
    Write-Host -Object $Trigger

    Die Variable enthält also den Code.

    Den kann man dann so ausführen.

    & $Trigger

    Und schon ist die Ausgabe des Textes wieder erfolgt.

    Beste Gruesse
    brima

    Samstag, 4. Februar 2017 13:06
  • Aha, ich weiss worauf du hinaus willst.

    Das heisst, ich könnte eig. auch folgendes tun oder, zum die erwünschte Aufgabe zu erhalten?

    if ($time -eq "daily") {
    
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Daily  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password }
    
    elseif ($time -eq "weekly") {
        
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Weekly  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password }
    
    elseif ($time -eq "monthly") {
        
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Monthly  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password } 
    
    
    


    Samstag, 4. Februar 2017 13:18
  • Hallo Brima

    Ich kriege es einfach nicht hin, dass sich mein Skript so ausführen lässt wie gewünscht.
    Kannst du mir helfen??

    Hier mein Script

    if ($time -eq "daily") {
    
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Daily  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password }
    
    elseif ($time -eq "weekly") {
        
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Weekly  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password }
    
    elseif ($time -eq "monthly") {
        
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Monthly  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password } 

    Was tu ich falsch?
    Grüsse


    Freitag, 10. Februar 2017 03:10
  • Was genau kommt denn für eine Fehlermeldung? Warum nutzt Du wenn Du schon mit Buttons arbeitest nicht das Button.Add_Click-Event?

    Dann sparst Du Dir die ganze If-Abfrage.

    Bspw.:

    $ButtonDaily.Add_Click(
    {
    $taskName = Read-Host "Name"
    $user = "username"
    $password = "username"
    $action = New-ScheduledTaskAction -Execute "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-command path-to-powershell-script"
    $trigger = New-ScheduledTaskTrigger -Daily  -AT $clock -DaysOfWeek $day
    $settings = New-ScheduledTaskSettingsSet 
    $inputObject = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings 
    Register-ScheduledTask -TaskName $taskName -InputObject $inputObject -User $user -Password $password
    }
    )



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)




    Freitag, 10. Februar 2017 09:08
  • Weil es kein Button ist.

    Ich würde ja gerne das ganze Script da reinpasten, jedoch ist dieser mehrere Tausend Zeilen ^^


    Freitag, 10. Februar 2017 13:28