Команда PHP Powershell

Попытка выполнить следующую команду в 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 ему.

7
задан Josh 1 March 2010 в 02:53
поделиться

2 ответа

Я возьму удар, хотя у меня вообще нет опыта работы с 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');
5
ответ дан 7 December 2019 в 07:44
поделиться
'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"');
2
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: