So führen Sie ein PowerShell-Skript aus


711

Wie führe ich ein PowerShell-Skript aus?

  • Ich habe ein Skript namens myscript.ps1
  • Ich habe alle notwendigen Frameworks installiert
  • Ich habe , dass die Ausführungsrichtlinie Sache
  • Ich habe die Anweisungen auf dieser MSDN-Hilfeseite befolgt und versuche, sie folgendermaßen auszuführen: powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'(mit oder ohne --noexit)

Dies gibt genau nichts zurück, außer dass der Dateiname ausgegeben wird.

Kein Fehler, keine Nachricht, nichts. Oh, wenn ich hinzufüge -noexit, passiert dasselbe, aber ich bleibe in PowerShell und muss manuell beenden.

Die .ps1-Datei soll ein Programm ausführen und die Fehlerstufe abhängig von der Ausgabe des Programms zurückgeben. Aber ich bin mir ziemlich sicher, dass ich noch nicht einmal dort bin.

Was mache ich falsch?


2
Starten Sie das so, powershellwie Sie es begonnen hätten cmd. Jetzt können Sie das myscript.ps1Skript als jede ausführbare Datei dort in (im Powershell-Fenster) ausführen, dh.\myscript.ps1
Parasrish

Antworten:


732
  1. Starten Sie Windows PowerShell und warten Sie einen Moment, bis die PSEingabeaufforderung angezeigt wird
  2. Navigieren Sie zu dem Verzeichnis, in dem sich das Skript befindet

    PS> cd C:\my_path\yada_yada\ (enter)
  3. Führen Sie das Skript aus:

    PS> .\run_import_script.ps1 (enter)

Was vermisse ich??

Oder: Sie können das PowerShell-Skript folgendermaßen ausführen cmd.exe:

powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)

laut diesem Blogbeitrag hier

Oder Sie können Ihr PowerShell-Skript sogar über Ihre C # -Anwendung ausführen :-)

Führen Sie PowerShell-Skripts asynchron in Ihrer C # -Anwendung aus


19
Ihr Blogpost-Link hat es geschafft. Ich muss verwenden powershell -noexit "& "C:\yada_yada\run_import_script.ps1"(beachten Sie die drei doppelten Anführungszeichen) Ich verstehe nicht wirklich warum, aber an diesem Punkt ist es mir eigentlich egal :) Vielen Dank!
Pekka

16
Was genau macht das "&?
BlueRaja - Danny Pflughoeft

16
Laut technet.microsoft.com/en-us/library/ee176949.aspx steht das '&' für "Wenn Sie diesen Zeichenfolgenwert tatsächlich ausführen möchten (dh wenn Sie das Skript ausführen möchten, dessen Pfad eingeschlossen ist) doppelte Anführungszeichen) Sie müssen dem Pfad den Anrufoperator (das kaufmännische Und) voranstellen. "
Doug Dawson

29
Keines davon funktionierte für mich, bis ich die Standardausführungsrichtlinie von Powershell für mein frisch erstelltes nicht signiertes Skript umging. Dies erforderte unter anderem einen Neustart von Powershell As Administrator. Stimmen Sie @LukePuplett voll und ganz zu - es ist brillant, den einfachsten Anwendungsfall 20 Minuten lang googeln und herumfummeln zu lassen. Und die Fehlermeldungen! Anscheinend haben diese Leute bei IBM gearbeitet ... in den 70ern.
Spike0xff

15
Wie in einem Kommentar unten angegeben, muss die Ausführungsrichtlinie umgangen werden. Eines der Elemente, die hier nicht behandelt werden, ist das Ausführen eines Powershell-Skripts über eine Befehlszeile, die einen Parameter übergibt. Um dies zu tun: powershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
Geben Sie

229

Wenn Sie mit PowerShell 2.0 arbeiten, verwenden Sie den -FileParameter von PowerShell.exe , um ein Skript aus einer anderen Umgebung wie cmd.exe aufzurufen. Zum Beispiel:

Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1

5
Gibt es eine Möglichkeit, einem solchen Aufruf Parameter hinzuzufügen?
Alexander Groß

11
Sie sollten nur in der Lage sein, die Argumente nach dem Pfad der Skriptdatei zu verfolgen. Aus der PowerShell.exe-Verwendung - [-File <filePath> <args>]
Keith Hill

"Kann nicht geladen werden, da die Ausführung von Skripten auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter" get-help about_signing "."
Pavel Vlasov

7
Wenn Sie nicht Skript Powershell Ausführung auf Ihrem System den Parameter aktiviert haben-ExecutionPolicy Bypass
Keith Hill


189

Wenn Sie ein Skript ausführen möchten, ohne die Standardrichtlinie für die Skriptausführung zu ändern, können Sie beim Starten von Windows PowerShell den Bypass- Schalter verwenden .

powershell [-noexit] -executionpolicy bypass -File <Filename>

11
-nologo
Fügen Sie

73

Art:

powershell -executionpolicy bypass -File .\Test.ps1

HINWEIS: Hier Test.ps1ist das PowerShell-Skript.


Dies sollte in einer Powershell ausgeführt werden, powershell -executionpolicy bypass -File .\Test.ps1vorausgesetzt, Ihr aktuelles Arbeitsverzeichnis enthält Test.ps1
Yeow_Meng

29

Ich hatte das gleiche Problem und habe es versucht und versucht ... Schließlich habe ich verwendet:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

Und setzen Sie diese Zeile in eine Batch-Datei, und das funktioniert.


22

Wenn Sie nur PowerShell 1.0 haben , scheint dies den Trick gut genug zu machen:

powershell -command - < c:\mypath\myscript.ps1

Die Skriptdatei wird an die PowerShell-Befehlszeile weitergeleitet.


3
Nützlicher Trick, wenn Sicherheitsrichtlinien die Ausführung von Skripten nicht zulassen.
Aron Lorincz

17

Ziemlich einfach. Klicken Sie in Windows mit der rechten Maustaste auf die PS1-Datei, und klicken Sie im Shell-Menü auf Mit PowerShell ausführen .


Dies funktioniert, um ein Skript schnell auszuführen, ohne die Ausführung von Skripten mit Ausführungsrichtlinie aktivieren zu müssen. Vielen Dank!
b01

Das habe ich gesucht, danke!
Aamol

11

Verwenden der cmd (BAT) -Datei:

@echo off
color 1F
echo.

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"

:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL

Wenn Sie als Administrator ausgeführt werden müssen :

  1. Erstellen Sie eine Verknüpfung, die auf die Eingabeaufforderung verweist (ich habe sie als administrative Eingabeaufforderung bezeichnet).
  2. Öffnen Sie die Eigenschaften der Verknüpfung und wechseln Sie zur Registerkarte Kompatibilität
  3. Stellen Sie im Abschnitt Berechtigungsstufe sicher, dass das Kontrollkästchen neben "Dieses Programm als Administrator ausführen" aktiviert ist


10

Wenn Ihr Skript mit der .ps1Erweiterung benannt ist und Sie sich in einem PowerShell-Fenster befinden, führen Sie es einfach aus./myscript.ps1 (vorausgesetzt, die Datei befindet sich in Ihrem Arbeitsverzeichnis).

Dies gilt ohnehin für mich unter Windows 10 mit PowerShell Version 5.1, und ich glaube nicht, dass ich etwas getan habe, um dies zu ermöglichen.


2
Wie beantwortet dies die Frage?
Peter Mortensen

4
Es beantwortet absolut die Frage: Wie führe ich ein Powershell-Skript aus? Antwort: Starten Sie die Powershell-Konsole und führen Sie das Skript aus. einfach. einfach. Funktioniert auch unter Linux.
Thufir

4
Dies beantwortet absolut die Frage und war genau das, wonach ich gesucht habe. wie myscript.ps1nicht funktioniert, warf einen Fehler, aber mit ./seiner Ausführung.
Jeff

7
  • Geben Sie den Pfad des Skripts an, dh die Pfadeinstellung durch cmd:

    $> . c:\program file\prog.ps1

  • Führen Sie die Einstiegspunktfunktion von PowerShell aus:

    Zum Beispiel, $> add or entry_func or main


Ausführen Ihrer Befehle an einer cmd-Eingabeaufforderung: >$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.und>$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
Suncat2000


1

Verwenden Sie den -FileParameter vor dem Dateinamen. Die Anführungszeichen lassen PowerShell denken, dass es sich um eine Folge von Befehlen handelt.


1

Ich habe eine sehr einfache Antwort, die funktioniert:

  1. Öffnen Sie PowerShell im Administratormodus
  2. Lauf: set-executionpolicy unrestricted
  3. Öffnen Sie ein reguläres PowerShell-Fenster und führen Sie Ihr Skript aus.

Ich habe diese Lösung über den Link gefunden, der als Teil der Fehlermeldung angegeben wurde: Informationen zu Ausführungsrichtlinien

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.