Can';t使用PHPs shell_exec执行powershell脚本函数

Can';t使用PHPs shell_exec执行powershell脚本函数,php,powershell,cmd,shell-exec,Php,Powershell,Cmd,Shell Exec,我试图将参数从PHP页面的POST请求传递到powershell脚本中 这是相关的PHP代码段: $selectedPartner = $_POST['partner']; $selectedGroup = $_POST['group']; $script = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe AddRemPartners";

我试图将参数从PHP页面的POST请求传递到powershell脚本中

这是相关的PHP代码段:

            $selectedPartner = $_POST['partner'];
            $selectedGroup = $_POST['group'];
            $script = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe AddRemPartners";
            if (isset($_POST['partner']) && isset($_POST['group'])){
                if (isset($_POST['AddButton']) && $selectedPartner !== "Select Partner" && $selectedGroup !== "Select Group") {
                    echo "<br>";
                    echo "Adding " . $selectedPartner . " to " . $selectedGroup . "...<br>";
                    $cmd = $script . " -Add $selectedPartner $selectedGroup";
                    echo "command is:<br>" . $cmd;
                    shell_exec($cmd);

                    //shell_exec('C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe C:\\xampp\\htdocs\\admin\\AddRemPartners.ps1 -Add $selectedPartner //$selectedGroup');


                    //$command = shell_exec('C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe telnet 10.11.14.32 4444');
                    //echo "User added successfully!";
                }
                if (isset($_POST['RemoveButton']) && $selectedPartner !== "Select Partner" && $selectedGroup !== "Select Group") {
                    echo "<br>";
                    //echo "selection was REMOVE";
                }       
            }
我知道的事情:

  • php post参数很好。我在burpsuit中捕获了请求,并且知道所有正确的参数都已发送

  • 生成的ps查询结果也很好。我将其输出到屏幕上,结果如下所示:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe AddRemPartners -Add User Group
    
    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe AddRemPartners-添加Dude1 Dude1组

  • 没有网络问题。如果直接从PowerShell中运行上述命令,则会正确执行

  • 我已经使用..来获取我的脚本\AddRemPartners.ps1,这样我就可以直接调用我的函数:

    PS>AddRemPartners-添加用户组

    PS>AddRemPartners-删除用户组

  • 我把范围缩小到这样:我不能像这样从cmd执行ps脚本:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe AddRemPartners -Add User Group
    
    由于出现了以下错误:

    AddRemPartners : The term 'AddRemPartners' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the
    name, or if a path was included, verify that the path is correct and try again.
    
    我认为这是可疑的,因为我需要在PHP中运行它。所以PHP可能也遇到了同样的问题。那么,如果我在执行的同时调用powershell,为什么cmd不能识别我的脚本呢


    非常感谢任何提示和指导。不幸的是,我束手无策/

    PS的第一个参数应该是脚本的完整路径。然后,您应该遵守PS的参数定义,在命令行上,就像在脚本中一样

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\whereis\AddRemPartners.ps1 -Add -user User -group Group
    
    脚本的第一行应该是参数定义和默认值

    param([string]$user, [string]$group, [switch]$Add, ...);
    

    我试过了,似乎得到了同样的结果。我更新了php以指向脚本的完整路径,并使用参数。这是正在执行的最后一个命令:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\xampp\htdocs\AddRemPartners.ps1-Add-user guest-group group对不起,需要澄清的是:如果我从cmd运行该命令,它不会给我一个无法识别cmdlet的错误。它运行,但不工作。然而,如果我从PS运行它,它会运行。我认为这可能与在模块中导入我的脚本和/或将其外包有关。它似乎在我采购的同一个外壳内工作。但是一个新的shell失败了…我更新了ps1脚本,使函数的第一行看起来像这样:函数AddRemPartners([switch]$Add,[switch]$Remove,[string]$User,[string]$Group){…}AddRemPartners$User$GroupPlease更新你问题中的脚本。最后一行应该将add或remove参数传递给函数。我不应该在末尾传递-add或-remove,因为这应该是动态的(即由用户决定)?如果php post请求看到选择了Add或Remove按钮,它将调用相应的逻辑。也就是说,它使用一个标志调用脚本。如果我把它加在最后,你会不会强迫它只使用其中一个?