windows — выполнить команду powershell через переполнение стека

У меня есть следующая проблема:

У меня запущен сервер xampp, и я хочу, чтобы он выполнял powershell. PHP запускает файл .bat, который содержит следующий код:

@echo
cd C:\OpenBR\bin
start /WAIT br -algorithm FaceRecognition -compare C:\xampp\htdocs\upload C:\xampp\htdocs\DP C:\xampp\htdocs\results\result.csvstart  /WAIT C:\xampp\htdocs\CSVconvert\sortieren.ps1

start  /WAIT C:\xampp\htdocs\CSVconvert\Removedouble.ps1

start  /WAIT C:\xampp\htdocs\CSVconvert\remove_path.ps1

start  /WAIT C:\xampp\htdocs\CSVconvert\remove_foo.ps1

start  C:\xampp\htdocs\CSVconvert\remove_quoatation.ps1

Первая часть работает отлично, вплоть до того момента, когда я захочу выполнить команду powershell «sortieren.ps1». Когда я запускаю пакет вручную, он выполняется и выполняет задание, а при запуске через php — нет.
Я установил «Set-ExecutionPolicy Unrestricted» в оболочках x86 и x64.
Я просто сбит с толку, потому что нормальная командная строка работает, а powershell — нет, даже после того, как ее установили без ограничений.

Я смотрел
выполнение скрипта Powershell из php
а также
PowerShell в Windows 7: Set-ExecutionPolicy для обычных пользователей
но не смог решить проблему.
Что я упустил?

1

Решение

Сеанс, в котором вы выполняете эти команды, не имеет тех же переменных окружения, что и при использовании PowerShell для их запуска вручную. Вам нужно будет указать абсолютный путь к исполняемой программе PowerShell и сценариям, которые вы хотите запустить, чтобы они были найдены.

start /WAIT C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\xampp\htdocs\CSVconvert\sortieren.ps1
2

Другие решения

Поскольку проблема заключалась в среде, я подумал, что вы могли бы извлечь выгоду из пакета, который обрабатывает этот аспект автоматически. Вот проект, который позволяет PHP получить и динамически взаимодействовать с реальным Powershell. Получи это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell');

$strCmd1   = 'first command from first script';
$return1  = $shellObj->exeCmd($strCmd1);

$strCmd2   = 'second command from first script';
$return2  = $shellObj->exeCmd($strCmd2);

Вместо запуска одного скрипта вы можете просто запустить каждую команду в отдельности и обработать возврат. Вы можете использовать любую команду, которая вам нравится, в отношении $ shellObj, среда поддерживается в течение всего срока действия сценария PHP.

0

По вопросам рекламы [email protected]