0

我有一个 powershell 脚本,我使用 php 使用 shell_exec 执行该脚本,并在有 Ajax 调用时执行此文件。(我使用的是 codeigniter 2 环境)

我用 Ajax 调用它,因为执行 ps 文件大约需要 45 秒,所以我想我会通过 Ajax 来做,这样我就可以给用户一条消息,说它正在加载。

我的 Ajax 函数如下所示:

<script>
    $(document).ready(function () {
        $.fn.colorbox({href:"#inline_content", inline:true, width:"650px", height:"235px", overlayClose: false, showClose: false});
        $('#cboxClose').remove();

        var csrf = $('[name="csrf_test_name"]').val();

        $.ajax({
            type: "POST",
            url: "/index.php/ajax/addAccount",
            data: { 
                    csrf_test_name: csrf
                  },
            cache:false,
            success: 
              function(data){
                  if(data == "True"){
                        window.location = "/index.php/private";  
                  }else{
                      $(window).colorbox.close();
                      alert("There was a problem creating your account.");
                  }
              },
            error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                    $('#Loading').hide();
                  }

        }); 


    });
</script>

CI Ajax 控制器只是抓取数据以提供给模型。

shell exec 函数如下所示:

function createCompany($companyID, $companyName, $domain){

    $psCompanyName = "t_".$companyID. "_".str_replace(" ", "", $companyName);

    $psScriptPath = "c:\\inetpub\\powershellscripts\\createCompany.ps1";
    $ps = shell_exec("powershell -command $psScriptPath -companyName '".$psCompanyName."' -domain '".$domain."'");
    return $ps;

}

PS1 文件执行良好。$ps 应该包含值“True”或“False”(ps1 最后有写输出“True”或写输出“False”,我已经检查并且所有任务都已成功执行。

当我用 return "True" 或 return "False" 替换 return $ps 时, sucess: 部分工作正常(我也没有从错误中得到任何东西:要么),而且当我在 Ajax 之外运行该函数时,我得到一个结果。

这是因为 Ajax 超时了吗?

4

1 回答 1

1

固定的。它正在执行脚本,但我需要将 shell 执行代码更改为:

    $ps = shell_exec("powershell -command $psScriptPath -companyName '".$psCompanyName."' -domain '".$domain."' < Nul");

不确定 < Nul 位的作用,但它正在执行 powershell 但导致错误 500

于 2012-10-11T09:37:58.560 回答