将Params从PHP传递给Powershell执行

时间:2012-07-23 18:03:46

标签: php powershell parameter-passing

我正在尝试编写一个 PHP脚本,它允许我从预定位置选择要下载的几个文件。我希望我的脚本将数组传递给前面编写的 Powershell脚本,并让我的 Powershell脚本处理下载(基本上php文件只需要告诉 powershell 文件需要下载的内容)。 我看了几个选项,似乎exec是我应该使用的命令(因为我不关心命令行输出我不需要shell_exec)。

到目前为止,我已经转为OFF安全模式,允许我使用此命令。我还应该注意, php 文件将从服务器运行,但 powershell 文件位于本地计算机上。

到目前为止,处理param传递的代码片段如下所示:

if(isset($_POST['formSubmit'])) 
{
    $choosePlugin = $_POST['wpPlugin'];
    $chooseTheme = $_POST['wpTheme'];

    if(isset($_POST['wpTheme'])) 
    {
        echo("<p>You selected: $chooseTheme</p>\n");
        exec('powershell.exe C:\Wordpress Setup\setupThemes.ps1 $chooseTheme');

    } 
    else 
    {
        echo("<p>You did not select a theme</p>\n");
    }

我对exec内的内容感到有些困惑。当我运行上面的代码时,没有错误,但没有任何反应。我对此有点新意,所以如果需要更多信息我会道歉。感谢您的任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试:

echo exec('powershell.exe C:\\Wordpress Setup\\setupThemes.ps1 $chooseTheme');

查看powershell.exe的结果(记住双\),也把绝对路径放到exe文件中:

 echo exec('c:\\PATH_TO_POWERSHELL.EXE\\spowershell.exe C:\\Wordpress Setup\\setupThemes.ps1 $chooseTheme');

答案 1 :(得分:0)

如果你想传递变量的内容,我应该使用双引号实际展开它,我想。此外,您应该引用脚本名称,因为路径包含空格:

exec("powershell.exe \"C:\Wordpress Setup\setupThemes.ps1\" $chooseTheme");