我有以下问题:
我有一个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.csv
start /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触发时,它没有。 我在x86和x64 shell中都设置了“Set-ExecutionPolicy Unrestricted”。 我只是感到困惑,因为正常的命令行工作,而powershell没有,即使在无限制地设置它之后。
我看过了 executing a Powershell script from php 和 PowerShell on Windows 7: Set-ExecutionPolicy for regular users 但无法解决问题。 我错过了什么?
答案 0 :(得分:2)
您运行这些命令的会话与使用PowerShell手动运行它们时的环境变量相同。您必须指定powershell可执行的绝对路径以及您要运行的脚本,以便找到它们。
start /WAIT C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\xampp\htdocs\CSVconvert\sortieren.ps1
答案 1 :(得分:0)
由于问题是环境,我认为您可能会从自动处理该方面的包中受益。这是一个允许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脚本的整个生命周期内都会维护该环境。