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