ausführen eines Powershell-Skript aus php
Ich versuche zum ausführen eines powershell-Skript von PHP, aber es scheint nicht zu funktionieren.
Das Skript 'newEvent.ps1' erstellt ein Ereignis auf dem Exchange-server.
$psPath = "powershell.exe";
$psDIR = "C:\\wamp\\www\\ant\\assets\\ps\\";
$psScript = "newEvent.ps1";
$runScript = $psDIR. $psScript;
$runCMD = $psPath." ".$runScript." 2>&1";
echo "\$psPath $psPath <br>";
echo "\$psDIR $psDIR <br>";
echo "\$psScript $psScript <br>";
echo "\$runScript $runScript <br>";
echo "\$runCMD $runCMD <br>";
exec( $runCMD,$out,$ret);
echo "<pre>";
print_r($out);
print_r($ret);
echo "</pre>";
It-Ausgänge:
$psPath powershell.exe
$psDIR C:\wamp\www\ant\assets\ps\
$psScript newEvent.ps1
$runScript C:\wamp\www\ant\assets\ps\newEvent.ps1
$runCMD powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 2>&1
Array
(
[0] => File C:\wamp\www\ant\assets\ps\newEvent.ps1 cannot be loaded because the execut
[1] => ion of scripts is disabled on this system. Please see "get-help about_signing"
[2] => for more details.
[3] => At line:1 char:39
[4] => + C:\wamp\www\ant\assets\ps\newEvent.ps1 <<<<
[5] => + CategoryInfo : NotSpecified: (:) [], PSSecurityException
[6] => + FullyQualifiedErrorId : RuntimeException
[7] =>
)
Wenn ich powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1
auf der Kommandozeile, funktioniert es einwandfrei.
Dies ist das erste mal, im Versuch, so etwas wie dieses. Ich lief Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
aber es gibt mir immer noch den gleichen Fehler.
In der Tat lief ich Set-ExecutionPolicy unristricted
, aber es ist immer noch das gleiche.
- Blick auf die Befehlszeile, die Sie ausführen.
- Stellen Sie sicher gehen in die 32-bit-und 64-bit-Instanzen und legen Sie die Ausführungsrichtlinie dann wiederholen. -> Set-ExecutionPolicy Unrestricted
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie dein Befehl ist umgeben von einfachen Anführungszeichen. Ich denke, wenn Sie Sie entfernen, wird Ihr Befehl ausgeführt werden soll.
shell_exec
liefert die Ausgabe von dem Befehl, den Sie ausführen. Weitere diagnose, speichern Sie die Ausgabe in eine variable, dann drucken Sie es aus:Stellen Sie sicher, dass Sie aktivieren Sie das ausführen von Skripten. Diese Funktion ist standardmäßig ausgeschaltet. Sie haben zum aktivieren der Ausführung von Skripts auf jeder Maschine, die Sie möchten ausführen von PowerShell-Skripts. Führen Sie
about help_signing
für weitere Informationen.Microsoft empfiehlt ausgeführt
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
. Dies ermöglicht allen Benutzer-Konten auf einem Computer ausgeführt werden lokale Skripts, ohne Frage, aber Bedarf der Bestätigung zum ausführen von Skripten aus dem internet heruntergeladen. Dies muss in einer administrativen Eingabeaufforderung. Wenn Sie eine 64-bit-Betriebssystem, müssen Sie dies tun, von einer 64-bit-und 32-bit-shell.Fand diese auf einer anderen website und dachte, ich würde es weitergeben:
Diese hat den trick für mich.
link
auf die Quelle (Website) als auch, vorausgesetzt, es ist!NSFW
.Verwenden "
-executionPolicy Unrestricted
" zusammen mit dem Befehl "powershell.exe
". Daher wird der Befehl :Dann wird es sicher funktioniert.
Ausführen einer script-Datei aus PHP, sollten Sie diesem Beispiel Folgen:
Sollten Sie beginnen mit einem einfachen PowerShell-Skript. Erstellen Sie eine Textdatei mit dem Namen "test.ps1".
Nun geben Sie das folgende Skript in dieser Datei:
Platzieren Sie den folgenden code in eine PHP-Datei mit dem Namen "test.php". Denken Sie daran, die Datei zu aktualisieren-Pfad im folgenden Beispiel "C:/PATH/TO/test.ps1" mit dem absoluten Pfad zu Ihrem eigenen Skript-Datei.
Der obige code erzeugt eine Liste aller Laufenden Prozesse.
Hinweis, daß ich mein script in ein Windows-PC, und ich wurde immer Fehlermeldungen, da der Datei-Pfad. So, ich ersetzt alle backslashes aus den Pfad der Datei mit vorwärts-Schrägstriche.
Sind folgende Parameter hervorzuheben:
Wenn Sie zum Beispiel benötigt, um eine Funktion aufzurufen, die in Ihrem Skript und senden Parameter an diese Funktion, würden Sie brauchen, um verwenden Sie die "-Command" - parameter.
Hier ist ein Beispiel, wie eine Funktion aufgerufen wird, "my-Funktion" in Ihrem PowerShell-Skript-Datei und pass die Parameter "-myParameter" und "-myOtherParameter" an, dass die Funktion mit den Werten "10" und "15" erstellt: