Php 将exec用于dsadd

Php 将exec用于dsadd,php,exec,Php,Exec,我正在Windows Server 2008上编程,我希望有一个WebUI与active directory域交互 我的主要问题之一是,我使用的是来自HTML表单的dsadd,但没有成功。我知道我的命令是正确的,我已经在Servers命令行上测试过了 我的代码如下: if (isset($_POST['Submit'])) { $DesiredUsername = $_POST['DesiredUsername']; $DesiredPasswor

我正在Windows Server 2008上编程,我希望有一个WebUI与active directory域交互

我的主要问题之一是,我使用的是来自HTML表单的dsadd,但没有成功。我知道我的命令是正确的,我已经在Servers命令行上测试过了

我的代码如下:

    if (isset($_POST['Submit']))
    {
        $DesiredUsername = $_POST['DesiredUsername'];
        $DesiredPassword = $_POST['DesiredPassword'];
        $DU = "{$DesiredUsername}";        // Desired Username
        $OU = "PHPCreatedUsers";          // Domain OU
        $DC1 = "slayerserv";             // Domain Part one 
        $DC2 = "local";                 // Domain Part Two
        $PWD = "{$DesiredPassword}";   // Password
        $ExecScript = 'dsadd user cn=$DesiredUsername,cn=PHPCreatedUsers,dc=slayerserv,dc=local -disabled no -pwd $DesiredPassword -mustchpwd yes';
        exec($ExecScript, $output);
        mysql_query("INSERT INTO addedusers (`ID`, `DU`, `OU`, `DC1`, `DC2, `PWD`) 
                    VALUES ('', '$DU', '$OU', '$DC1', '$DC2', '$PWD')");
        echo "<br><br>";
        print_r($output);

    #   echo "User: $DesiredUsername Has been Created";
    }
打印(输出);给出:

数组([0]=>[1]=>使用32字节数据Ping 127.0.0.1:[2]=>来自127.0.0.1的回复:字节=32次[4]=>127.0.0.1的Ping统计:[5]=>数据包:发送=1,接收=1,丢失=0(0%丢失),[6]=>以毫秒为单位的近似往返时间:[7]=>最小值=0毫秒,最大值=0毫秒,平均值=0毫秒)


事实证明,从PHP运行的dsadd存在问题,将用户保存到PHPCreatedUsers的OU中的原始操作失败


我更改了行,将创建的用户保存到“users”的默认OU中,它可以正常工作。

exec的正确用法是exec($var,$newvar);newvar自动捕获输出。@EmilVikström:
$output
是一个输出引用,如果它不存在且没有任何错误/通知,将创建它。可以说,这可能是拙劣的风格,但这不是一个错误。达丽尔:你是否打印出了
ExecScript
,以验证它是否包含应该包含的内容?将'2>&1'添加到命令末尾以捕获stderr输出,并使用第三个参数
exec
查看退出代码。。将单引号更改为双引号,以便正确注册变量,并执行列出的其他操作
-2147016656==0x80072030
。根据谷歌的说法,这相当于“服务器上没有这样的对象(HRESULT的例外:0x80072030)”。不幸的是,我不知道如何从这里开始。如何将return_变量转换为Windows停止代码?
        $Script = 'ping 127.0.0.1 -n 1';
    exec($Script, $Output);
    print_r($Output);