none
Powershell Script als geplanten Task laufen lassen RRS feed

  • Frage

  • Ich habe ein Problem mit einem Powershell-Script in Verbindung mit einem geplanten Task.

    Zum Script

    • Das Script prüft den Status von Bitlocker und sendet ggf. eine Mail, sollte dieser deaktiviert sein.
    • Für den Befehl Get-BitlockerVolume werden Admin-Rechte benötigt.
    • Das Script liegt auf einem Netzlaufwerk (Executionpolicy ist per GPO auf Unrestricted gesetzt).

    Zum Task

    • Der Task wird per GPO erstellt und verteilt
    • Der Task soll beim Logon eines Benutzers ausgeführt werden.
    • Da der Befehl Get-BitlockerVolume Admin-Rechte benötigt, wird der Task mit dem Domänen-Benutzer "pcconfig" mit Admin-Rechten ausgeführt. Dieser Benutzer hat auch Zugriff auf den Share in dem das Script liegt.

    Aufrufe

    Folgende Aufrufe habe ich schon versucht:

    • powershell.exe "\\pfad zum script\scriptname.ps1"
    • powershell.exe -file "\\pfad zum script\scriptname.ps1"
    • powershell.exe -command "\\pfad zum script\scriptname.ps1"
    • powershell.exe -noprofile -file "\\pfad zum script\scriptname.ps1"

    Problem

    • Egal, wie ich das Script aufrufe, es bleibt im Task immer mit dem Status "Wird ausgeführt" und dem Ereignis 0x41301 hängen.
    • Im Eventviewer steht dann die Meldung: "PowerShell-Konsole ist für Benutzereingaben bereit." (Ereignis: 40692).
    • Wenn ich den Task direkt mit dem Benutzer ausführe, mit dem ich auch angemeldet bin, funktioniert es einwandfrei. (Vorausgesetzt, der angemeldete Benutzer hat Admin-Rechte).
    • Wenn ich mich einmalig mit dem Benutzer "pcconfig" am Gerät anmelde und mich anschließend mit einem unprivilegiertem x-beliebigen Domänen-Benutzer anmelde, funktioniert der Task ebenfalls einwandfrei.

    Wo genau liegt hier das Problem? Ich nehme an, dass das ein Sicherheitsmechanismus von Powershell oder dem Betriebssystem ist. Wie führe ich das denn richtig durch?
    Ich möchte auf keinen Fall die Benutzerdaten im Script speichern.
    Gibt es vllt. die Möglichkeit, den Status von Bitlocker ohne Admin-Rechte abzurufen?

    Beim Betriebssystem handelt es sich um Windows 8.0 Professional (Powershell Version 3.0)

    Danke!

    Schöne Grüße,
    Michael David





    Dienstag, 17. Dezember 2013 09:13

Antworten

  • So, das war's tatsächlich:

    Zusammenfassung:

    Aufruf im Scheduled Task: powershell.exe -command  "& '\\pfad zum script\scriptname.ps1'"
    Konfiguration Executionpolicy: Unrestricted
    Konfiguration Internet Explorer: UNC-Pfad zum Script als Trusted Site definieren.

    Danke für deine Hilfe Florian!

    Schöne Grüße,
    Michael

    • Als Antwort markiert Michael.David Mittwoch, 18. Dezember 2013 12:47
    Mittwoch, 18. Dezember 2013 12:47

Alle Antworten

  • Hallo Michael,

    habt ihr das ev. zur Verfügung?

    http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/mdop/mbam.aspx

    Ev. brauchst du das Userprofile von pcconfig... Haken bei Run with highest Privileges gesetzt? Ev. mit User System ausführen?

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...


    • Bearbeitet Florian Reck Dienstag, 17. Dezember 2013 09:41 Typo
    Dienstag, 17. Dezember 2013 09:41
  • Hallo Florian,

    nein, das MBAM haben wir leider nicht.

    Den Haken für die Privileges habe ich gesetzt, ich habe auch schon veruscht, den Task mit dem SYSTEM User laufen zu lassen, allerdings werde ich da nach einem Kennwort gefragt, das ich leider nicht weiß.
    Hierzu habe ich gelesen, dass wenn man den Task in den GPO in der Computer Configuration definiert, keine Kennwortabfrage kommen sollte. Allerdings kommt bei mir auch hier eine Kennwortabfrage.


    Dienstag, 17. Dezember 2013 09:45
  • Hallo Michael,

    das Kennwort beim System kannst du leer lassen, das sollte akzeptiert werden. Ist bei W8.1 eventuell anders, mit W7 tut's auf jeden Fall...

    Grüsse

    Florian 


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. Dezember 2013 09:51
  • Das habe ich auch schon versucht... wenn ich das mache, wird der Task garnicht erst erstellt.
    Dienstag, 17. Dezember 2013 09:53
  • Ok, dann suchen wir mal weiter.. Darfst du das Skript hier posten? Sonst ist im trüben fischen..

    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. Dezember 2013 10:02
  • Klar... bitteschön: 

    $computername = [Environment]::MachineName
    $user = [Environment]::UserName
    
    $Bitlocker_Status = (Get-BitLockerVolume -MountPoint "C:").ProtectionStatus
    if ($Bitlocker_Status -ne "On") {
        Send-MailMessage -SmtpServer "smtpserver" -From "bitlocker@wolford.com" -to "Bitlocker <bitlocker@wolford.com>" -Subject "ACHTUNG!! Bitlocker wurde deaktiviert" -Body "Computername: $computername $([System.Environment]::NewLine)Username:     $user "
        }

    Dienstag, 17. Dezember 2013 10:06
  • Ich glaub ich habs gefunden:

    http://powershell.com/cs/forums/t/13032.aspx

    powershell.exe -noprofile -noninteractive -file "\\pfad zum script\scriptname.ps1"

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. Dezember 2013 10:22
  • Danke, ich probier's später mal aus und schau ob's klappt.
    Meld mich dann wieder.

    Sg,
    Michael

    Dienstag, 17. Dezember 2013 10:24
  • Ok, geh jetzt auch essen... ev. brauchst du noch den -executionpolicy Bypass .. oder hat vielleicht Peter Kriegel noch eine Idee..

    en guete

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. Dezember 2013 10:27
  • Hab das gerade eben getestet.

    Jetzt läuft der Task zwar angeblich erfolgreich durch (Ereignis 0x0) aber es passiert nichts.
    Im Eventlog steht jetzt Folgendes:

    "Error Message = AuthorizationManager check failed.

    Kontext:
            Severity = Warning
            Host Name = ConsoleHost
            Host Version = 3.0
            Host ID = f28182f9-4053-4bad-8aa7-192b61e78117
            Engine Version = 3.0
            Runspace ID = cbcdb08e-5b78-4ed2-8fef-047e62597069
            Pipeline ID = 1
            Command Name = 
            Command Type = 
            Script Name = 
            Command Path = 
            Sequence Number = 15
            User = WOLNT\PCConfig
            Shell ID = Microsoft.PowerShell

    Dienstag, 17. Dezember 2013 11:52
  • Hallo Michael,

    hast du das Benutzerprofil von pccnt gelöscht vor dem ausführen?

    http://peterfi136.wordpress.com/2012/01/31/powershell-authorizationmanager-check-failed/

    Sonst stehe ich auch auf dem Schlauch, da bin ich dann am Ende...

    Edit: hast du den ganze Pfad zur powershell.exe in Task? Sonst braucht der Task eventuell die Environment-Variable, die er mit -noprofile nicht hat....

    Grüsse

    Florian 


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...


    Dienstag, 17. Dezember 2013 12:26
  • Das klappt leider auch nicht, hab's gerade versucht.
    Dienstag, 17. Dezember 2013 12:38
  • Hallo,

    ev. C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -noprofile -noninteractive -command  “& ‘\\pfad zum script\scriptname.ps1'

    http://community.spiceworks.com/how_to/show/17736-run-powershell-scripts-from-task-scheduler

    Kann doch nicht so schwer sein ?!? Aber viele kämpfen damit..

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...


    Dienstag, 17. Dezember 2013 13:13
  • Das funktioniert leider auch nicht.

    Das muss irgendein Mechanismus von Powershell sein.
    Wenn ich das Selbe mit einer Batch-Datei versuche, klappt das einwandfrei.
    Wenn ich aber den Scriptaufruf in eine Batch packe, stehe ich wieder vor dem Problem.

    Bin schon seit mehreren Tagen auf der Suche nach einer Lösung, weiß aber nicht recht,
    wie ich im Internet nach diesem spezifischen Problem suchen soll.... das sprengt jede Suchmaschine

    Dienstag, 17. Dezember 2013 16:04
  • Hallo Michael,

    und wenn du im Batch das Laufwerk mappst geht es auch nicht?

    Gruss

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. Dezember 2013 17:18
  • Nein, das geht auch nicht.... allerdings habe ich gestern noch was rausgefunden.

    Ich habe per GPO die Executionpolicy auf "Unrestricted" gesetzt.
    Wenn ich diese Policy deaktiviere und im Aufruf des Scripts die Executionpolicy auf "Bypass" setze, dann klappt's.

    Leider kann ich per GPO die Executionpolicy nicht auf Bypass setzen.
    Was ich jetzt noch gelesen habe, ist, dass es mit Unrestricted auch funktioniert, wenn ich den Netzwerkpfad, auf dem das Script liegt, im Internet Explorer in die Trusted Sites einfüge.

    Das muss ich jetzt noch testen. Lass dich dann wissen, ob's klappt oder nicht.

    Mittwoch, 18. Dezember 2013 06:38
  • Hallo Michael,

    danke fürs Feedback... Hier noch Links zum Thema:

    http://pscommunity.de/executionpolicy-ausser-kraft-setzen/

    http://stackoverflow.com/questions/9271681/how-to-run-powershell-script-even-if-set-executionpolicy-is-banned

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Mittwoch, 18. Dezember 2013 07:19
  • So, das war's tatsächlich:

    Zusammenfassung:

    Aufruf im Scheduled Task: powershell.exe -command  "& '\\pfad zum script\scriptname.ps1'"
    Konfiguration Executionpolicy: Unrestricted
    Konfiguration Internet Explorer: UNC-Pfad zum Script als Trusted Site definieren.

    Danke für deine Hilfe Florian!

    Schöne Grüße,
    Michael

    • Als Antwort markiert Michael.David Mittwoch, 18. Dezember 2013 12:47
    Mittwoch, 18. Dezember 2013 12:47