Чтобы выполнить файл скрипта из PHP, вы должны следовать этому примеру:
Вы должны начать с простого скрипта PowerShell. Создайте текстовый файл с именем « test.ps1 ».
Теперь введите следующий скрипт в этом файле:
Get-Process
Поместите приведенный ниже код в файл PHP с именем " test.php ". Не забудьте обновить путь к файлу в следующем примере "C: /PATH/TO/test.ps1" , указав абсолютный путь к собственному файлу сценария.
<code>echo "<pre>";
echo Shell_Exec('powershell -InputFormat none -ExecutionPolicy ByPass -NoProfile -Command "& { . \"C:/PATH/TO/test.ps1\"; }"');
echo "
";
Приведенный выше код выведет список всех запущенных вами процессов.
Обратите внимание, что я запускал свой скрипт на ПК с Windows и получал сообщения об ошибках из-за пути к файлу. Итак, я заменил все обратные косые черты из пути к файлу на прямые косые черты.
Следующие параметры заслуживают внимания:
- -InputFormat none - Благодаря ошибке в PowerShell скрипт никогда не завершит работу или не завершится. Этот параметр обеспечивает обход этой ошибки.
- -ExecutionPolicy ByPass - Без этого параметра код выдаст сообщение об ошибке с низким уровнем привилегий.
- -NoProfile - С этим параметром ваш скрипт будет работать быстрее и более предсказуемо.
- -Command - Загрузка файла сценария через параметр "-Command" вместо параметра "-File" обеспечит большую гибкость.
Если, например, вам нужно вызвать функцию внутри вашего скрипта и отправить параметры этой функции, вам нужно будет использовать параметр "-Command".
Вот пример того, как вызвать функцию "my-function" внутри файла скрипта PowerShell и передать параметры "- myParameter" и "- myOtherParameter " для этой функции со значениями " 10 " и " 15 " соответственно:
<code>echo "<pre>";
echo Shell_Exec('powershell -InputFormat none -ExecutionPolicy ByPass -NoProfile -Command "& { . \"C:/PATH/TO/test.ps1\"; my-function -myParameter 10 -myOtherParameter 15 }"');
echo "
";