Intereting Posts
Как проверить cookie с другого сайта в php и не разрешать доступ к mywebsite? Получить последний измененный файл в каталоге Действие Laravel не определено SELECT * FROM people WHERE user_id = '$ user_id' ORDER BY time GROUP BY фамилия Как я могу использовать постоянные соединения HTTP 1.1 и конвейерную обработку из PHP? Закрытие тега PHP – когда это необходимо? использовать значение столбца как имя столбца mysql CodeIgniter: подсчет результатов из объединенной таблицы Арбитражная точность в PHP Установите флажок «Вставить или Обновить таблицу». Как получить совпадение ближайшей даты в PHP из базы данных SQL Фиксация сломанной кодировки UTF8 Поиск PHP ключа в многомерном массиве Mysql Вставка или Обновление данных таблицы таблицы в другую таблицу с помощью соответствия valus Перенос файлов с локального компьютера на удаленный сервер с помощью php-скрипта, находящегося на удаленном сервере

Команда 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^"^} 

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

Edit: Также я мог бы запустить его как скрипт .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' 

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

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

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

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