【问题标题】:PHP - Shell Exec - Powershell and AjaxPHP - Shell Exec - Powershell 和 Ajax
【发布时间】:2012-10-10 15:57:38
【问题描述】:

我有一个 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 时,成功:部分工作正常(我也没有从错误中得到任何东西:或者),当我在 Ajax 之外运行函数时,我得到一个结果。

这是因为 Ajax 超时了吗?

【问题讨论】:

    标签: php ajax powershell-2.0


    【解决方案1】:

    已修复。它正在执行脚本,但我需要将 shell 执行代码更改为:

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

    不确定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多