henere
Goto Top

Frage zur Powershell

Hallo Gemeinde,

warum funktioniert das nicht:

C:\Users\Administrator>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "C:\Program Files\Scripte\Datenbackup.ps1"

C:\Program : Die Benennung "C:\Program" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den
Vorgang.
In Zeile:1 Zeichen:1

back-to-topC:\Program Files\Scripte\Datenbackup.ps1

back-to-top~~~~~~~~~~

+ CategoryInfo : ObjectNotFound: (C:\Program:String) , CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Das hier aber schon ?

C:\Users\Administrator>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "C:\Programme\Scripte\Datenbackup.ps1"

Mit was für Anführungszeichen muss ich arbeiten, damit es funktioniert ?
In einem englischsprachigen System habe ich keinen Ordner Programme.

Danke und Grüße,

Henere

Content-Key: 294399

Url: https://administrator.de/contentid/294399

Printed on: April 19, 2024 at 10:04 o'clock

Member: emeriks
emeriks Jan 27, 2016 updated at 20:03:32 (UTC)
Goto Top
Hi,
ich denke, so
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "&{""C:\Program Files\Scripte\Datenbackup.ps1""}  


E.
Member: Henere
Henere Jan 27, 2016 at 20:17:17 (UTC)
Goto Top
Zitat von @emeriks:

Hi,
ich denke, so
> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "&{""C:\Program Files\Scripte\Datenbackup.ps1""}  
> 

E.

Nicht Dein Ernst, oder ???
Member: emeriks
emeriks Jan 27, 2016 at 20:26:43 (UTC)
Goto Top
Nun ja, bei uns werden so PS-Scripte im Task Scheduler gestartet ....
Member: Henere
Henere Jan 27, 2016 at 20:30:02 (UTC)
Goto Top
Zitat von @emeriks:

Nun ja, bei uns werden so PS-Scripte im Task Scheduler gestartet ....

Genau darum geht es mir ja. Der Task wurde nicht ausgeführt.... weil (siehe oben).
Mitglied: 114757
Solution 114757 Jan 27, 2016 updated at 22:53:28 (UTC)
Goto Top
Weil im Pfad Leerzeichen sind braucht die Powershell wenn man in einer Batch den Parameter -command benutzt Hochkommas den Pfad und das & sagt der Powershell das es ein Befehl bzw. Skriptblock ist
powershell.exe -Executionpolicy Bypass -command "&'c:\Program Files\Scripte\Datenbackup.ps1'"  

Andere Variante wenn es nur ein simples Skript ist was gestartet werden soll
powershell.exe -Executionpolicy Bypass -File "c:\Program Files\Scripte\Datenbackup.ps1"  

Das geht alles 100%, Herr Frührentner...

Gruß jodel32

Ich verweise auch mal auf @colinardo's Kurzeinführung dazu

back-to-topAnleitung: 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 eine 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 RemoteSigned -File "C:\Pfad\Script.ps1"
back-to-topStarten 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"
Liegt das Script im selben Verzeichnis in dem man sich gerade befindet, kann man es auch so abkürzen:
.\script.ps1
back-to-topStarten 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"
Wenn man dem Script Parameter übergeben möchte:
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
Man kann auch mehrere Scripte hintereinander ausführen lassen:
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
Weitere Parameter zeigt einem ein powershell -? in einer Konsole an.
back-to-topStarten 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"
Member: Henere
Henere Jan 27, 2016 at 23:05:21 (UTC)
Goto Top
Dankeschön !

Die executionpolicy habe ich schon im script drin. Das klappt.
Mitglied: 114757
114757 Jan 28, 2016 updated at 09:39:37 (UTC)
Goto Top
Zitat von @Henere:
Die executionpolicy habe ich schon im script drin. Das klappt.
?? Die muss man nur einmalig anpassen,
die im Skript zu hinterlegen ist also völliger Blödsinn, denn wenn das Script bereits läuft bringt das setzen dieser nichts mehr ...!

Ab und zu mal die Doku lesen wäre nicht verkehrt, anstatt PS durch Trial & Error zu lernen.
Member: TlBERlUS
TlBERlUS Jan 28, 2016 at 09:49:21 (UTC)
Goto Top
Zitat von @114757:
Ab und zu mal die Doku lesen wäre nicht verkehrt, anstatt PS durch Trial & Error zu lernen.
Naja, ich habe mir PowerShell auch (mehr oder weniger) durch Trial & Error beigebracht und behaupte einfach mal, dass ich mittlerweile brauchbare Resultate damit erziehle (Wenn auch zugegebenermaßen manchmal mit mehr Codezeilen als es tatsächlich benötigen würde)
Mitglied: 114757
114757 Jan 28, 2016 updated at 10:08:20 (UTC)
Goto Top
Aber wenn ich einen Befehl benutze den ich nicht ganz verstehe, dann schaue ich zumindest erst mal in die Referenz um zu sehen was die Vorraussetzungen dafür sind in schreibe ihn nicht blind ist Skript ohne zu verstehen was er überhaupt bedeutet.

Die Executionpolicy "im Skript selber" zu setzen ist aber schon sehr sehr schräg das musst du zugeben face-wink
Wie soll sie ausgeführt werden wenn die Ausführung von Skripten auf einem unkonfigurierten Systen ja noch verboten ist...
Member: Henere
Henere Jan 28, 2016 at 10:11:13 (UTC)
Goto Top
Zitat von @114757:

Aber wenn ich einen Befehl benutze den ich nicht ganz verstehe, dann schaue ich zumindest erst mal in die Referenz um zu sehen was die Vorraussetzungen dafür sind in schreibe ihn nicht blind ist Skript ohne zu verstehen was er überhaupt bedeutet.

Die Executionpolicy "im Skript selber" zu setzen ist aber schon sehr sehr schräg das musst du zugeben face-wink
Wie soll sie ausgeführt werden wenn die Ausführung von Skripten auf einem unkonfigurierten Systen ja noch verboten ist...

Hat aber funktioniert, beim ersten Aufruf hat er gefragt, ob er das im System eintragen soll.
Mitglied: 114757
114757 Jan 28, 2016 updated at 10:16:45 (UTC)
Goto Top
Zitat von @Henere:
Hat aber funktioniert, beim ersten Aufruf hat er gefragt, ob er das im System eintragen soll.

Aber nur weil du die Execution Policy schon mal außerhalb eines Skriptes in einer Konsole ausgeführt hast, deswegen funktioniert das jetzt!

Es reicht die Policy einmalig für das System zu setzen.
Member: Henere
Henere Jan 28, 2016 at 10:31:07 (UTC)
Goto Top
Zitat von @114757:

Zitat von @Henere:
Hat aber funktioniert, beim ersten Aufruf hat er gefragt, ob er das im System eintragen soll.

Aber nur weil du die Execution Policy schon mal außerhalb eines Skriptes in einer Konsole ausgeführt hast, deswegen funktioniert das jetzt!

Es reicht die Policy einmalig für das System zu setzen.

Einspruch euer Ehren, hatte ich niemals per Hand gemacht. Wie gesagt, die Abfrage kam beim ersten Probelauf des scriptes.
Member: TlBERlUS
Solution TlBERlUS Jan 28, 2016 updated at 14:46:56 (UTC)
Goto Top
Zitat von @Henere:
Einspruch euer Ehren, hatte ich niemals per Hand gemacht. Wie gesagt, die Abfrage kam beim ersten Probelauf des scriptes.
Richtig, und danach ist diese Zeile obsolet in dem Skript.