Exec Powershell Befehlsausführung per PHP Seite
also ich habe folgendes vor zu realisieren. Ich möchte über eine PHP-Seite DNS Einträge anlegen bzw. löschen.
Im Powershell läuft das bereits und funktioniert wie folgt:
Code:
zum hinzufügen und
Code:
zum löschen.
Es wird durch diese Befehle ein DNS erzeugt der dann über http://01.private.meinserver.xxx (IP 10.1.1.1) erreicht werden soll.
Ich hatte dafür vorher eine einfache MYSQL Datenbank die ich mit der jeweiligen IP Adresse gefüttert habe und die ich dann an eine PHP Weiterleitung
geschickt habe. Das stellte sich dann allerdings problematisch dar, wenn ich zusätzliche Portadressen übertragen wollte. Da ist so ein DNS A-Eintrag eleganter
und auch einfacher zu händeln.
In PHP habe ich es dann wie folgt probiert:
Code:
wobei ich als Rückmeldung bei "echo 'Temp:'. $tmp" immer "Zugriff verweigert" bekomme.
Ich habe mich da schon durch verschiedene Foren gewühlt und festgestellt das die Antworten immer recht mager ausgefallen sind.
Meine Vermutung geht in die Richtung:
- Web-User hat nicht genug rechte
- Kommando Systax ist verkehrt
Powershell ExecutionPolicy ist auf unristricted eingestellt und zwar auf Powershell32 und auch Powershell64.
Als Ausgabe bekomme ich
Wenn ich die Ausgabe per "Ausführen" direkt auf dem Server ausführe, fügt er mir den DNS Eintrag ordnungsgemäß hinzu, somit halte ich die Syntax für in Ordnung
Kann bitte mal jemand über das PHP schauen und mir da weiterhelfen?
Außerdem bräuchte ich Tipps beim einstellen der Web User Rechte bezüglich der Berechtigung zum ausführen von Powershell Befehlen.
System:
Windows2012 Server
Plesk12
Microsoft IIs Webserver
PHP
Im Powershell läuft das bereits und funktioniert wie folgt:
Code:
dnscmd . /recordadd privat.meinserver.xxx 01 a 10.1.1.1
Code:
dnscmd . /recorddelete privat.meinserver.xxx 01 a /f
Es wird durch diese Befehle ein DNS erzeugt der dann über http://01.private.meinserver.xxx (IP 10.1.1.1) erreicht werden soll.
Ich hatte dafür vorher eine einfache MYSQL Datenbank die ich mit der jeweiligen IP Adresse gefüttert habe und die ich dann an eine PHP Weiterleitung
geschickt habe. Das stellte sich dann allerdings problematisch dar, wenn ich zusätzliche Portadressen übertragen wollte. Da ist so ein DNS A-Eintrag eleganter
und auch einfacher zu händeln.
In PHP habe ich es dann wie folgt probiert:
Code:
<?php
{
$comm = "dnscmd . /recordadd private.meinserver.xxx 01 a 127.0.0.1";
echo "Start ...<br>";
$ex = "C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\\ powershell.exe -command ".$comm." 2>&1";
echo $ex."<br>";
$tmp = exec($ex,$results);
echo "Temp: ".$tmp."<br>";
echo "Result: ".$results."<br>";
echo "Done.";
}
?>
Ich habe mich da schon durch verschiedene Foren gewühlt und festgestellt das die Antworten immer recht mager ausgefallen sind.
Meine Vermutung geht in die Richtung:
- Web-User hat nicht genug rechte
- Kommando Systax ist verkehrt
Powershell ExecutionPolicy ist auf unristricted eingestellt und zwar auf Powershell32 und auch Powershell64.
Als Ausgabe bekomme ich
Start ...
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -command dnscmd . /recordadd private.meinserver.xxx 01 a 127.0.0.1 2>&1
Temp: Zugriff verweigert
Result: Array
Done.
Wenn ich die Ausgabe per "Ausführen" direkt auf dem Server ausführe, fügt er mir den DNS Eintrag ordnungsgemäß hinzu, somit halte ich die Syntax für in Ordnung
Kann bitte mal jemand über das PHP schauen und mir da weiterhelfen?
Außerdem bräuchte ich Tipps beim einstellen der Web User Rechte bezüglich der Berechtigung zum ausführen von Powershell Befehlen.
System:
Windows2012 Server
Plesk12
Microsoft IIs Webserver
PHP
6 Antworten
- LÖSUNG 114757 schreibt am 11.02.2016 um 23:08:28 Uhr
- LÖSUNG Smint1984 schreibt am 12.02.2016 um 00:32:04 Uhr
- LÖSUNG Smint1984 schreibt am 12.02.2016 um 00:51:40 Uhr
- LÖSUNG 114757 schreibt am 12.02.2016 um 09:29:56 Uhr
- LÖSUNG Smint1984 schreibt am 12.02.2016 um 09:59:57 Uhr
- LÖSUNG 114757 schreibt am 12.02.2016 um 09:29:56 Uhr
- LÖSUNG Jaaaxy schreibt am 13.02.2016 um 00:12:01 Uhr
LÖSUNG 11.02.2016, aktualisiert um 23:13 Uhr
Zu den Berechtigungen siehe hier, Stichwort App-Pool:
https://www.administrator.de/forum/asp-net-powershell-script-ausf%C3%BCh ...
Das musst du selbstredend beachten, wäre ja fatal wenn der IIS alles per Default mit Admin-Rechten ausführen würde
Und wozu extra mit der Powershell einen Befehlt ausführen der doch regulär sowieso in der CMD läuft ?
Gruß jodel32
https://www.administrator.de/forum/asp-net-powershell-script-ausf%C3%BCh ...
Das musst du selbstredend beachten, wäre ja fatal wenn der IIS alles per Default mit Admin-Rechten ausführen würde
Und wozu extra mit der Powershell einen Befehlt ausführen der doch regulär sowieso in der CMD läuft ?
Gruß jodel32
LÖSUNG 12.02.2016 um 00:32 Uhr
Also erstmal finde ich es extrem unelegant aus PHP exec/eval auszuführen. Sowas gehört in die bash etc.
PHP ist nicht nativ für Windows, es ist für Unix. Nutz doch C,C++ usw.
PHP ist nicht nativ für Windows, es ist für Unix. Nutz doch C,C++ usw.
LÖSUNG 12.02.2016 um 00:51 Uhr
Was macht eigentlich die geschweifte Klammer in Zeile 2 und 14?
LÖSUNG 12.02.2016, aktualisiert um 09:32 Uhr
@Smint1984
p.s. Kommentare lassen sich editieren und somit in einem zusammenfassen ... und zumindest eine Begrüßung oder Gruß wären ganz nett dem TO gegenüber.
Vielleicht in Zukunft be deinen Posts beherzigen
Gruß jodel32
p.s. Kommentare lassen sich editieren und somit in einem zusammenfassen ... und zumindest eine Begrüßung oder Gruß wären ganz nett dem TO gegenüber.
Vielleicht in Zukunft be deinen Posts beherzigen
Gruß jodel32
LÖSUNG 12.02.2016 um 09:59 Uhr
Hallo jodel32,
guter Tipp, dankeschön!
guter Tipp, dankeschön!
LÖSUNG 13.02.2016 um 00:12 Uhr
Danke erstmal für die Tipps...
Ich werde mich da mal einlesen und dann wieder melden mit einer Lösung oder neuen Problemen
Bin allerdings auch gerne an anderen Lösungswegen interessiert. Weiss allerdings nicht ob ich sie umsetzen kann, da ich mit Bits und Bytes aufgewachsen bin ( sprich: C64 Generation ) und daher meine Lernphase bei Assembler, Pascal, HTML, PHP so ziemlich endet und ich zu tun habe das ich solche Sachen die Später an mich ran kamen wie C,C++ usw. zumindestens zu verstehen wenn ich den Code sehe
Wie gesagt, ich lese mich da mal ein und melde mich... thx
Ich werde mich da mal einlesen und dann wieder melden mit einer Lösung oder neuen Problemen
Bin allerdings auch gerne an anderen Lösungswegen interessiert. Weiss allerdings nicht ob ich sie umsetzen kann, da ich mit Bits und Bytes aufgewachsen bin ( sprich: C64 Generation ) und daher meine Lernphase bei Assembler, Pascal, HTML, PHP so ziemlich endet und ich zu tun habe das ich solche Sachen die Später an mich ran kamen wie C,C++ usw. zumindestens zu verstehen wenn ich den Code sehe
Wie gesagt, ich lese mich da mal ein und melde mich... thx