2014-04-28 29 views
1

我一直在扼杀我的大脑和我的电脑,希望有人能帮助我。使用参数执行PHP中的powershell脚本

我有一个PHP网站,需要执行一个PowerShell脚本,然后执行和执行。

调用的.ps1的PHP是

define('updaterPath','C:\\artemis\\DbUpdateUtility1.0.12.2'); 
define('outputLocation',updaterPath.'\\Output'); 
$CMD = updaterPath . '\\ArtemisXmlUtil.exe'; 
$action = 'import'; 
$args= ' -f' . outputLocation; 
$psScriptPath = '.\\get-process.ps1'; 
$query = shell_exec("powershell -command $psScriptPath -cmd '$CMD' -action '$action' -paras '$args' < NUL"); 

我的.ps1脚本是:

param(
[string]$CMD, 
[string]$action, 
[string]$paras 
) 

& $CMD $action $paras 

现在,当我回显完整的命令,它看起来完美的,可以复制和粘贴到PowerShell并成功运行,但是当我尝试从PHP实际执行它时,它只运行$ CMD变量并忽略$ action和$ paras。

我试图concactenating变量全部为1个字符串,但失败,因为甚至不能够看到可执行文件。

完整的命令shouls样子:

C:\artemis\DbUpdateUtility1.0.12.2\ArtemisXmlUtil.exe import -fC:\artemis\DbUpdateUtility1.0.12.2\Output 

回答

0

好了,想通了这一个自己出去。

问题是如何执行该命令。使用“&”强制powershell忽略传递到脚本中的参数。正确的方法是,因为命令是可执行文件,所以将整个命令构建为一个字符串并将其全部传递给ps1文件,然后将ps1文件更改为使用invoke-expression命令行开关。

param(
[string]$CMD 
) 

Invoke-expression $CMD