none
PowerShell Script wird nicht beendet wenn über Taskplaner gestartet RRS feed

  • Frage

  • Hallo zusammen,

    ich habe ein Powershellscript zur WSUS Serverbereinigung erstellt und als geplante Aufgabe eingerichtet. Auf den Windows 2008R2 Servern läuft das auch soweit prima, nur auf dem 2012R2 Server bleibt der Task im Status "wird ausgeführt". Wenn ich das Script manuell starte läuft es soweit durch. Wo kann hier der Fehler liegen?

    Mittwoch, 26. November 2014 09:50

Antworten

  • Hi,

    wie sieht die Aktion deiner geplanten Aufgabe aus? Ich gebe den Pfad zum Skript im Argumentfeld immer in "" an. Ich denke, dass das Skript hier nicht richtig angesprochen wird, da kein Powershell-Prozess zu sehen ist.

    LG Patrick

    Freitag, 28. November 2014 06:37

Alle Antworten

  • Es gibt da keine magische Antwort darauf!

    Da wir hier nicht sehen welcher keine Code ausgeführt wird, können wir nur wild herum raten!

    Da hilft nur loggen, loggen und nochmal loggen!

    Da man Scripts innerhalb des Schedulers nicht direkt debuggen kann, lässt du in deinem Script am besten bei jeder Zeile (oder jeder 10. Zeile) in einem log eine Ausgabe machen. damit kannst du die stelle eingrenzen an der dein Script stehen bleibt.


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Mittwoch, 26. November 2014 11:24
  • Am 26.11.2014 schrieb Christoph Ederbauer:

    ich habe ein Powershellscript zur WSUS Serverbereinigung erstellt und als geplante Aufgabe eingerichtet. Auf den Windows 2008R2 Servern läuft das auch soweit prima, nur auf dem 2012R2 Server bleibt der Task im Status "wird ausgeführt". Wenn ich das Script manuell starte läuft es soweit durch.

    Wie genau wird das Script denn im Taskplaner ausgeführt? Gibst Du
    einen Benutzernamen und ein PW ein? Wenn nein, starte das Script im
    Taskplaner und beobachte den Taskmanager, siehst Du einen Powershell
    Task?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Mittwoch, 26. November 2014 17:16
  • Ja, ich gebe einen Benutzernamen und Passwort an.

    Mittwoch, 26. November 2014 22:36
  • Am 26.11.2014 schrieb Christoph Ederbauer:

    Ja, ich gebe einen Benutzernamen und Passwort an.

    OK, siehst Du denn einen Powershell Prozess im Taskmanager nach dem
    Start des Scriptes? Greifst Du auf einen Nicht-Lokalen-LW-Buchstaben
    zu? Kannst Du das Script hier veröffentlichen?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 27. November 2014 05:54
  • Nein, ich sehe keinen Powershell Prozess im Taskmanager. Ich greife auf keine lokalen Laufwerksbuchstaben zu. Hier das Script:

    # WSUS Connection Parameters:
     [String]$WSUSServer = "dewoz-srv-001.ra-eun.roechling.root"
    [Boolean]$useSecureConnection = $False
    [Int32]$portNumber = 8530
    [String]$LogFile = "C:\WSUSClean\WSUSLog.txt" #Beispiel!
     [String]$SMTPServer = "192.168.52.22"


    # Windows PowerShell example to check 'If File Exists'
    $FileExists = Test-Path $LogFile
     If ($FileExists -eq $True) {
    #Alte Logdatei vorsichtshalber löschen.
     Remove-Item $LogFile
    }

    # Cleanup Parameters:
     # Decline updates that have not been approved for 30 days or more, are not currently needed by any clients, and are superseded by an aproved update.
    [Boolean]$supersededUpdates = $True
    # Decline updates that aren't approved and have been expired my Microsoft.
    [Boolean]$expiredUpdates = $True
    # Delete updates that are expired and have not been approved for 30 days or more.
     [Boolean]$obsoleteUpdates = $True
    # Delete older update revisions that have not been approved for 30 days or more.
     [Boolean]$compressUpdates = $True
    # Delete computers that have not contacted the server in 30 days or more.
    [Boolean]$obsoleteComputers = $False
    # Delete update files that aren't needed by updates or downstream servers.
     [Boolean]$unneededContentFiles = $True

    #EndRegion VARIABLES

    #Region SCRIPT

    # Load .NET assembly
     [void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration");

    # Connect to WSUS Server
    $wsusParent = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($WSUSServer,$useSecureConnection,$portNumber);

    # Log the date first
     date | out-file -filepath $LogFile -append -noClobber;

    # Perform Cleanup
    $WSUSServer | out-file -filepath $LogFile -append -noClobber;
    $CleanupManager = $wsusParent.GetCleanupManager();
    $CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles);
    $CleanupManager.PerformCleanup($CleanupScope) | out-file -filepath $LogFile -append -noClobber;
    #EndRegion SCRIPT

    # Der nachfolgende Teil ist von hier kopiert: http://gallery.technet.microsoft.com/scriptcenter/90ca6976-d441-4a10-89b0-30a7103d55db#content
    # Mail the report...
    $message = new-object Net.Mail.MailMessage
    $mailer = new-object Net.Mail.SmtpClient($SMTPServer)
     
    $message.From = "wsus@worms-vi.de"
    $message.To.Add("christoph.eder@roechling-automotive.de")
    $MeinText = "WSUS - Server CleanUp Bericht " + $WSUSServer
    $message.Subject = $MeinText
    $message.Body = [string]::join([environment]::NewLine, (get-content $logfile))
    $mailer.Send($message)

    #Logdatei löschen.
     Remove-Item $LogFile

    Donnerstag, 27. November 2014 08:05
  • Am 27.11.2014 schrieb Christoph Ederbauer:

    Nein, ich sehe keinen Powershell Prozess im Taskmanager. Ich greife auf keine lokalen Laufwerksbuchstaben zu. Hier das Script:

    # WSUS Connection Parameters:
     [String]$WSUSServer = "dewoz-srv-001.ra-eun.roechling.root"
    [Boolean]$useSecureConnection = $False
    [Int32]$portNumber = 8530
    [String]$LogFile = "C:\WSUSClean\WSUSLog.txt" #Beispiel!
     [String]$SMTPServer = "192.168.52.22"

    Wenn Du dich mit dem Benutzer am Server anmeldest, kannst Du dann auch
    das Script ausführen? Hat der Benutzer genügend NTFS-Berechtigungen
    für die TXT und das darüber liegende Verzeichnis?

    # Windows PowerShell example to check 'If File Exists'
    $FileExists = Test-Path $LogFile
     If ($FileExists -eq $True) {
    #Alte Logdatei vorsichtshalber löschen.
     Remove-Item $LogFile
    }

    Löschberechtigungen für die TXT? Darf der Benutzer denn auch ein
    Powershellscript ausführen?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 27. November 2014 17:36
  • Wenn ich mich mit dem Benutzer anmelde und das Script ausführe läuft dieses ohne Probleme durch.
     Die TXT wird erstellt und auch wieder gelöscht. Auch die Email erhalte ich.

    Wird das Script per Taskplaner ausgeführt, wird nicht einmal die TXT erstellt.

    Donnerstag, 27. November 2014 17:38
  • Am 27.11.2014 schrieb Christoph Ederbauer:

    Wenn ich mich mit dem Benutzer anmelde und das Script ausführe läuft dieses ohne Probleme durch.
     Die TXT wird erstellt und auch wieder gelöscht. Auch die Email erhalte ich.

    Wird das Script per Taskplaner ausgeführt, wird nicht einmal die TXT erstellt.

    Hmm, pack den kompletten Aufruf des Scriptes incl. Pfad zur
    Powershell.exe in eine Batch und ruf die korrekt über den Taskplaner
    auf. Tut sich jetzt etwas?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 27. November 2014 18:44
  • Hi,

    wie sieht die Aktion deiner geplanten Aufgabe aus? Ich gebe den Pfad zum Skript im Argumentfeld immer in "" an. Ich denke, dass das Skript hier nicht richtig angesprochen wird, da kein Powershell-Prozess zu sehen ist.

    LG Patrick

    Freitag, 28. November 2014 06:37
  • Klappt. Vielen Dank. Anscheinend braucht Server 2012 den Task in dieser Form.

    Freitag, 28. November 2014 08:30
  • Am 28.11.2014 schrieb Christoph Ederbauer:

    Klappt. Vielen Dank. Anscheinend braucht Server 2012 den Task in dieser Form.

    An was lag es denn genau? An den fehlenden Anführungszeichen oder
    daran das der Pfad zum Script in den Argumenten sein muß?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 28. November 2014 14:21
  • Ich hatte unter Programm/Skript den Pfad zum Skript angegeben. Der Rest war leer.
    Freitag, 28. November 2014 14:24
  • Am 28.11.2014 schrieb Christoph Ederbauer:

    Ich hatte unter Programm/Skript den Pfad zum Skript angegeben. Der Rest war leer.

    Danke für die Rückmeldung. Das hatte ich zwar zum Schluß vermutet,
    aber eigentlich konnte ich mir es nicht vorstellen das es so simpel
    sein sollte. ;)

    Bei den Batch-Dateien mußt Du das übrigens auch mit der CMD.EXE
    genauso machen. ;)


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 28. November 2014 14:53
  • Komisch ist nur, dass es auf den 2008er Servern mit der Pfadangabe zum Skript funktioniert. Beim 2012er nicht.
    Freitag, 28. November 2014 14:56
  • Am 28.11.2014 schrieb Christoph Ederbauer:

    Komisch ist nur, dass es auf den 2008er Servern mit der Pfadangabe zum Skript funktioniert. Beim 2012er nicht.

    Ah, jetzt ist mir diese Vorgehensweise auch klar. Ich hab das schon
    immer getrennt eingegeben, deshalb kannte ich das Problem nicht. ;)


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 28. November 2014 15:38