通过php执行powershell命令

时间:2015-02-08 22:13:27

标签: php windows powershell batch-file

我有以下问题:

我有一个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 phpPowerShell on Windows 7: Set-ExecutionPolicy for regular users 但无法解决问题。 我错过了什么?

2 个答案:

答案 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脚本的整个生命周期内都会维护该环境。