PHP в Powershell с использованием shell_exec - PullRequest
2 голосов
/ 02 марта 2010

Если я бегу:

$output = shell_exec('powershell "get-service "dhcp""'); 

Я получаю идеальный вывод службы dhcp, показывающей работу, но если я запускаю:

$output = shell_exec('powershell "get-user "testing""'); 

Я ничего не понимаю.

Я не вижу никакой разницы в том, что я здесь делаю - и почему get-service будет работать, а get-user - нет. Если я запускаю его в cmd, он работает отлично. Есть идеи?

Я считаю, что проблема может заключаться в том, что apache запускает команду и не имеет разрешений. Может ли это быть так? Apache работает от имени другого пользователя? Если это так, у него нет доступа для этого.

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Попробуйте перенаправить вывод ошибок на стандартный вывод, чтобы увидеть, видите ли вы ошибку.

$output = shell_exec('powershell "get-user "testing" 2>&1"'); 

Этот фрагмент взят из http://www.aboutdebian.com/nettools.txt

//Normally, the shell_exec function does not report STDERR messages. 
//The   "2>&1"          option tells the system 
//to pipe STDERR to STDOUT so if there is an error, we can see it.
$fp = shell_exec("$command 2>&1");
0 голосов
/ 01 ноября 2016

exec () и shell_exec () не очень многословны по своей природе. exec () позволяет вам установить третью переменную и получить статус выполнения, но сбоям в большинстве случаев присваивается «1», и вы не можете узнать, была ли это ошибка прав доступа, если двоичный файл не является исполняемым и т. д.

Введите проект, который позволяет PHP получать и динамически взаимодействовать с реальным Powershell. Получите это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell');

$strCmd1   = 'get-user "testing"';
$return1  = $shellObj->exeCmd($strCmd1);

Возвращение даст вам команду return ИЛИ ошибку от powershell, как если бы вы сидели за консолью. Кроме того, вы можете выполнить любую команду, которая вам нравится, в отношении $ shellObj, среда поддерживается в течение всего срока действия сценария PHP. Поэтому вместо объединения команд в файле сценария просто выполните их одну за другой, используя метод exeCmd (), чтобы вы также могли обрабатывать возврат и любые исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...