Aufgabenplanung: Powershell script interactive
Guten Morgen,
ich automatisiere gerade ein paar Aufgaben via Powershell Scripte und Aufgabenplanung auf einem Windows Server 2012 R2.
Dabei bin ich auf zwei Probleme gestossen:
1.) ich habe ein Script "SichernExtern.ps1" welches in der Powershell ISE funktioniert.
In dem Script wird per [System.Windows.Forms.MessageBox] dazu aufgefordert die externe USB-HDD anzuschliessen.
Per Aufgabenplanung wird das Script jedoch nicht ausgeführt, es poppt kurz das PS-Fenster auf und wird sofort geschlossen.
Ich habe die PS Option -nointeractive gefunden, dachte dem entsprechen ist -interactive die Lösung.
Ich habe in der Aufgabenplanung bei Aktionen -> Argumente hinzufügen u.a. folgendes versucht: -interactive -command"PfadZumScript"
Wer kann helfen?
Hier mal ein Auszug aus meinem Script:
2.) Desweiteren habe ich noch ein anderes kleines, eher kosmetisches Problem:
Andere Scripte sollen Hidden laufen, dies habe ich bei Aktionen -> Argumente hinzufügen: -WindowsStyle Hidden -command"PfadZumScript" errreicht.
Allerdings poppt hier auch kurz jeweils ein PS-Fenster auf.
Meine Recherche hat ergeben, das ich dagegen nichts tun kann, könnt Ihr das bestätigen, oder gibt es dafür doch eine Lösung?
Wünsche Euch ein schönes Wochenende
Potshock
ich automatisiere gerade ein paar Aufgaben via Powershell Scripte und Aufgabenplanung auf einem Windows Server 2012 R2.
Dabei bin ich auf zwei Probleme gestossen:
1.) ich habe ein Script "SichernExtern.ps1" welches in der Powershell ISE funktioniert.
In dem Script wird per [System.Windows.Forms.MessageBox] dazu aufgefordert die externe USB-HDD anzuschliessen.
Per Aufgabenplanung wird das Script jedoch nicht ausgeführt, es poppt kurz das PS-Fenster auf und wird sofort geschlossen.
Ich habe die PS Option -nointeractive gefunden, dachte dem entsprechen ist -interactive die Lösung.
Ich habe in der Aufgabenplanung bei Aktionen -> Argumente hinzufügen u.a. folgendes versucht: -interactive -command"PfadZumScript"
Wer kann helfen?
Hier mal ein Auszug aus meinem Script:
$Medium = '\\Zocker\Z_CNMEMORY'
#Aufforderung das externe Sicherungmedium anzuschließen
$Result = [System.Windows.Forms.MessageBox]::Show("Bitte externes Sicherungmedium anschließen!`r`n`r`nDie Sicherung dauert ... ;_)!`r`n`r`nMuss sein!","Achtung: Aufforderung!",1,[System.Windows.Forms.MessageBoxIcon]::Exclamation)
If ($Result -eq "OK") {
#Pfad zum externen Medium wird geprüft
if (Test-Path $Medium) {
#Hier wird die vorher weiter oben definierte function m. dem Namen Aktion ausgeführt!
Aktion
}
else
{
$Fehler = [System.Windows.Forms.MessageBox]::Show("Sicherungsmedium nicht gefunden... :-(!","ERROR",1,[System.Windows.Forms.MessageBoxIcon]::Error)
}
}
else {
$Result1 = [System.Windows.Forms.MessageBox]::Show("Ist nicht dein Ernst ... ;-)!`r`n`r`nMuss sein!","ERROR",1,[System.Windows.Forms.MessageBoxIcon]::Error)
If ($Result1 -eq "OK") {
#Pfad zum externen Medium wird geprüft
if (Test-Path $Medium) {
#Hier wird die vorher weiter oben definierte function m. dem Namen Aktion ausgeführt!
Aktion
}
else
{
$Fehler = [System.Windows.Forms.MessageBox]::Show("Sicherungsmedium nicht gefunden... :-(!","ERROR",1,[System.Windows.Forms.MessageBoxIcon]::Error)
}
}
}
2.) Desweiteren habe ich noch ein anderes kleines, eher kosmetisches Problem:
Andere Scripte sollen Hidden laufen, dies habe ich bei Aktionen -> Argumente hinzufügen: -WindowsStyle Hidden -command"PfadZumScript" errreicht.
Allerdings poppt hier auch kurz jeweils ein PS-Fenster auf.
Meine Recherche hat ergeben, das ich dagegen nichts tun kann, könnt Ihr das bestätigen, oder gibt es dafür doch eine Lösung?
Wünsche Euch ein schönes Wochenende
Potshock
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 415888
Url: https://administrator.de/contentid/415888
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Servus Potshock .
Grüße Uwe
Zitat von @potshock:
1.) ich habe ein Script "SichernExtern.ps1" welches in der Powershell ISE funktioniert.
In dem Script wird per [System.Windows.Forms.MessageBox] dazu aufgefordert die externe USB-HDD anzuschliessen.
Per Aufgabenplanung wird das Script jedoch nicht ausgeführt, es poppt kurz das PS-Fenster auf und wird sofort geschlossen.
Ich habe die PS Option -nointeractive gefunden, dachte dem entsprechen ist -interactive die Lösung.
Ich habe in der Aufgabenplanung bei Aktionen -> Argumente hinzufügen u.a. folgendes versucht: -interactive -command"PfadZumScript"
Wer kann helfen?
1.) ich habe ein Script "SichernExtern.ps1" welches in der Powershell ISE funktioniert.
In dem Script wird per [System.Windows.Forms.MessageBox] dazu aufgefordert die externe USB-HDD anzuschliessen.
Per Aufgabenplanung wird das Script jedoch nicht ausgeführt, es poppt kurz das PS-Fenster auf und wird sofort geschlossen.
Ich habe die PS Option -nointeractive gefunden, dachte dem entsprechen ist -interactive die Lösung.
Ich habe in der Aufgabenplanung bei Aktionen -> Argumente hinzufügen u.a. folgendes versucht: -interactive -command"PfadZumScript"
Wer kann helfen?
- Den Parameter -interactive gibt es nicht und deshalb ein Fehler!
- Muss damit Eingaben aus der Aufgabenplanung dem User auf in der Konsole-Session präsentiert werden können dieser im Kontext des Users laufen, im Task also die Option gesetzt sein.
- Damit du Messageboxes in deinem Skript nutzen kannst musst du den Namespace System.Windows.Forms auch erst importieren den du hier nutzt, damit du ihn verwenden kannst. In der ISE ist dieser per Default schon importiert deswegen geht es in der ISE, aber eben nicht wenn es nicht in der ISE läuft.
Add-Type -A System.Windows.Forms
2.) Desweiteren habe ich noch ein anderes kleines, eher kosmetisches Problem:
Andere Scripte sollen Hidden laufen, dies habe ich bei Aktionen -> Argumente hinzufügen: -WindowsStyle Hidden -command"PfadZumScript" errreicht.
Allerdings poppt hier auch kurz jeweils ein PS-Fenster auf.
Meine Recherche hat ergeben, das ich dagegen nichts tun kann, könnt Ihr das bestätigen, oder gibt es dafür doch eine Lösung?
Ja, starte dein Skript mit einem kleinen VBS-Skript aus der AufgabenplanungAndere Scripte sollen Hidden laufen, dies habe ich bei Aktionen -> Argumente hinzufügen: -WindowsStyle Hidden -command"PfadZumScript" errreicht.
Allerdings poppt hier auch kurz jeweils ein PS-Fenster auf.
Meine Recherche hat ergeben, das ich dagegen nichts tun kann, könnt Ihr das bestätigen, oder gibt es dafür doch eine Lösung?
CreateObject("Wscript.Shell").Run "powershell -Executionpolicy ByPass -File ""PfadzumScript.ps1""",0,False
Wünsche Euch ein schönes Wochenende
Gleichfalls.Grüße Uwe
Zitat von @potshock:
1.) Ich habe "Add-Type -AssemblyName System.Windows.Forms" und auch mal
"Add-Type -AssemblyName -System.Windows.Forms.MessageBox" jeweils oben in mein Script eingefügt.
ist ja auch falsch geschrieben.Beachte das Add-Type erst ab PS 3.0 verfügbar ist, wenn das nicht der Fall ist musst du die alte Variante zum Laden verwenden.1.) Ich habe "Add-Type -AssemblyName System.Windows.Forms" und auch mal
"Add-Type -AssemblyName -System.Windows.Forms.MessageBox" jeweils oben in mein Script eingefügt.
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Leider klappt es immer noch nicht.
2.) CreateObject("Wscript.Shell").Run "powershell -Executionpolicy ByPass -File ""PfadzumScript.ps1""",0,False
"VbsSicher.vbs" tut das was es soll, wenn ich es direkt aufrufe, aber in der Aufgabenplanung wieder nicht .
Meine Einstellungen dort sind:
Programm/Script:
C:\Windows\System32\cscript.exe
Argumente: -Command "C:\Scripts\VbsSicher.vbs
Wieso gehst du automatisch davon aus das cscript.exe den Parameter -Command hat??? Den gibt es nicht! Geb mal Cscript /? In die Konsole ein dann erübrigt sich die Frage! Außerdem auf Tippfehler und Leerzeichen im Pfad achten!2.) CreateObject("Wscript.Shell").Run "powershell -Executionpolicy ByPass -File ""PfadzumScript.ps1""",0,False
"VbsSicher.vbs" tut das was es soll, wenn ich es direkt aufrufe, aber in der Aufgabenplanung wieder nicht .
Meine Einstellungen dort sind:
Programm/Script:
C:\Windows\System32\cscript.exe
Argumente: -Command "C:\Scripts\VbsSicher.vbs
Wie man Powershell-Skripte über die Aufgabenplanung ausführt habe ich hier schon x mal gespostet. Findest du in meinen Beiträgen, also einfach mal die Suche anwerfen. Das wiederhole ich jetzt nicht nochmal.
Und was in deinem Skript, falsch läuft kannst du effektiv mit dem CMDLet Start-Transcript erörtern falls im Skript selbst Fehler liegen , z.B Berechtigungsprobleme auf Ressourcen oder nicht vorhandene Laufwerke durch andere Credentials etc. pp.
Falls du trotz allem nicht in der Lage bist es zu beheben, => PN dann schauen wir nach Absprache per Teamviewer drauf.
Und falls du mir immer noch nicht glaubst (Über die Aufgabenplanung ausgeführt, Benutzer muss natürlich angemeldet sein sonst bringt das ja nichts):
Das &'C:\Pfad\Script.ps1' ist nur eine weitere Variante wie man Skripte über den Command-Parameter ausführen kann.
Zum Abschluss noch meine Grundlagen dazu die ich immer wieder dazu hier poste.
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eineadministrative Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
- Alternativ lässt sich ein Script auch ohne das globale Ändern der ExecutionPolicy ausführen indem man die Policy als Parameter auf der Kommandozeile mitgibt:
powershell.exe -ExecutionPolicy ByPass -File "C:\Pfad\Script.ps1"
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Starten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
powershell -?
in einer Konsole an.Starten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"Damit sollte kein Wunsch mehr offen sein.