Frage

Ich habe ein paar Zeilen PowerShell-Code, die ich als automatisiertes Skript verwenden möchte.Ich möchte, dass es funktioniert, indem ich es mit einer der folgenden Optionen aufrufen kann:

  1. Eine Befehlszeile, die PowerShell öffnet, ein Skript ausführt und PowerShell schließt (dies würde für eine globale Build-Routine verwendet werden)
  2. Eine Datei, auf die ich doppelklicken kann, um das oben Gesagte auszuführen (ich würde diese Methode verwenden, wenn ich Komponenten meines Build-Prozesses manuell teste)

Ich habe die PowerShell-Dokumentation online durchgesehen und obwohl ich viele Skripte finden konnte, konnte ich keine Anweisungen dazu finden, wie ich das tun kann, was ich brauche.Danke für die Hilfe.

War es hilfreich?

Lösung

Speichern Sie Ihr Skript als .ps1-Datei und starten Sie es mit powershell.exe, etwa so:

powershell.exe .\foo.ps1

Stellen Sie sicher, dass Sie den vollständigen Pfad zum Skript angeben und stellen Sie sicher, dass Sie Ihre Ausführungsrichtlinienebene mindestens auf „RemoteSigned“ eingestellt haben, damit nicht signierte lokale Skripte ausgeführt werden können.

Andere Tipps

Aus http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Wenn Sie bereit sind, Ihr schönes PowerShell-Skript mit ein wenig CMD zu beschmutzen, können Sie einen PowerShell-CMD-Polyglotten-Trick verwenden.Speichern Sie Ihr PowerShell-Skript als CMD-Datei und fügen Sie diese Zeile oben ein:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Wenn Sie zitierte Argumente unterstützen müssen, gibt es eine längere Version, die auch Kommentare zulässt.(Beachten Sie den ungewöhnlichen CMD-Kommentartrick mit doppeltem @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Quelle für Matts Antwort.

Ich kann es zum Laufen bringen, indem ich auf eine Datei doppelklicke, indem ich eine Batchdatei mit folgendem Inhalt erstelle:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Skript automatisch von einem anderen Skript ausführen (z. B.Batch-Datei)

Wie Matt Hamilton vorgeschlagen hat, erstellen Sie einfach Ihr PowerShell-.ps1-Skript und rufen Sie es auf mit:

PowerShell C:\Path\To\YourPowerShellScript.ps1

Oder wenn das Arbeitsverzeichnis Ihrer Batchdatei dasselbe Verzeichnis ist, in dem sich das PowerShell-Skript befindet, können Sie einen relativen Pfad verwenden:

PowerShell .\YourPowerShellScript.ps1

Und bevor dies funktioniert, müssen Sie die Ausführungsrichtlinie des PCs festlegen, wie das geht, zeige ich weiter unten.


Skript manuell ausführen, Methode 1

Du kannst Weitere Informationen finden Sie in meinem Blogbeitrag, aber erstellen Sie im Wesentlichen Ihre PowerShell-.ps1-Skriptdatei, um das zu tun, was Sie wollen, und erstellen Sie dann eine .cmd-Batchdatei im selben Verzeichnis und verwenden Sie Folgendes für den Inhalt der Datei:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Ersetzen MyPowerShellScript.ps1 in der 3. Zeile mit dem Dateinamen Ihres PowerShell-Skripts.

Dadurch können Sie einfach auf die Batchdatei doppelklicken, um Ihr PowerShell-Skript auszuführen, und müssen Ihre PowerShell-Ausführungsrichtlinie nicht ändern.

Mein Blog-Beitrag zeigt auch, wie Sie das PowerShell-Skript als Administrator ausführen können, falls dies erforderlich ist.


Skript manuell ausführen, Methode 2

Wenn Sie nicht für jedes Ihrer PowerShell-Skripte eine Batchdatei erstellen möchten, können Sie alternativ das Standardverhalten des PowerShell-Skripts von „Bearbeiten“ in „Ausführen“ ändern, sodass Sie auf Ihre .ps1-Dateien doppelklicken können, um sie auszuführen.

Es gibt eine zusätzliche Registrierungseinstellung, die Sie ändern möchten, damit Sie Skripts ausführen können, deren Dateipfad Leerzeichen enthält.Ich zeige, wie man beides macht zu diesem Blogbeitrag.

Bei dieser Methode müssen Sie jedoch zunächst Ihre Ausführungsrichtlinie festlegen, um die Ausführung von Skripten zu ermöglichen.Sie müssen dies nur einmal pro PC tun und können dies tun, indem Sie diese Zeile in einer PowerShell-Eingabeaufforderung ausführen.

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force ist der Befehl, der die Ausführungsrichtlinie tatsächlich ändert;Dies setzt es auf RemoteSigned, sodass Sie das bei Bedarf in etwas anderes ändern können.Außerdem führt diese Zeile PowerShell automatisch als Administrator für Sie aus, was zum Ändern der Ausführungsrichtlinie erforderlich ist.

Sie können diesen Befehl verwenden:powershell.exe -argument c:\scriptPath\Script.ps1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top