Команда PHP Powershell - PullRequest
       12

Команда PHP Powershell

7 голосов
/ 01 марта 2010

Попытка запустить следующую команду в php для запуска команды powershell ...

следующие работы:

$output = shell_exec(escapeshellcmd('powershell get-service | group-object'));

Я не могу запустить его так:

$output = shell_exec('powershell get-service | group-object');

не пройдет трубу | символ

но если я попытаюсь запустить:

$output = shell_exec(escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}'));

Я не получаю вывод.

Следующее:

$cmd = escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}');

возвращается:

powershell get-service ^| where-object ^{^$_.status -eq ^"Running^"^}

Любые предложения о том, почему это происходит и как это исправить?

Редактировать: Также я мог запустить его как скрипт .ps1, но я хочу иметь возможность передать ему $ var.

Ответы [ 2 ]

5 голосов
/ 01 марта 2010

Я сделаю удар, хотя у меня нет опыта работы с PHP вообще.

У меня такое ощущение, что происходит то, что ваш символ канала интерпретируется командной оболочкой вместо PowerShell. Например, если вы запустили в командной строке cmd.exe следующее:

dir /s | more

Выход первой команды передается на вход второй, как вы и ожидали в PowerShell.

Экранирование строки только усугубит проблему, поскольку вы преобразуете строку таким образом, что PowerShell не знает, как ее удалить.

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

$output = shell_exec('powershell.exe -c "get-service | group-object"');

Или, предпочтительно, похоже, что есть функция exec (), которая не проходит через командную оболочку. Это может работать лучше.

$output = exec('powershell.exe -c get-service | group-object');
2 голосов
/ 01 марта 2010
'powershell get-service | group-object'

будет интерпретироваться как

  1. , запустит PowerShell и передаст его get-service в качестве аргумента
  2. , затем направит вывод powershell в group_object(т.е. не вывод get-service)

То, что вам нужно, чтобы powershell видел get-service | group-object в качестве аргумента, поэтому вы должны заключить это в кавычки, например так.

 $output = shell_exec('powershell "get-service | group-object"');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...