Команда 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.
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');
'powershell get-service | group-object'
будет интерпретироваться как
- запустить powershell и передать его в качестве аргумента get-service
- затем направьте вывод powershell в group_object (то есть, не вывод get-service)
То, что вы хотите, это видеть PowerShell get-service | group-object
как аргумент, вы должны заключить это в кавычки, вот так.
$output = shell_exec('powershell "get-service | group-object"');