我正在尝试使用system(“dsquery user”)打印出活动目录中的所有用户;在PHP中,我的问题是它被削减,所以我有一个包含所有用户的数组,没有别的,atm这是我的代码:
<?php
$test = system("dsquery user");
$teste = explode('CN=', $test);
print_r($teste);
$user = trim($teste[1], ",");
echo "<br \>" . $user;
?>
我只能获取一个用户atm,因为爆炸会删除其他所有内容。 任何帮助都表示赞赏,基本上我最终不会有这样的事情:
$user[0] = Administrator
$user[1] = kbgrt
$user[2] = asdasd
这是输出:
“CN = Administrator,CN = Users,DC = domain,DC = local”“CN = Guest,CN = Users,DC = domain,DC = local”“CN = krbtgt,CN = Users,DC = Domain, DC = local“”CN = doctor.scripto,CN = Users,DC = domain,DC = local“ -
我希望你能理解其他评论,我会尝试以另一种方式解释。
答案 0 :(得分:0)
如果命令输出不是很容易解析命令的输出。然而,一个好的开始是尝试尽可能地简化它并看模式。但是希望下面的代码对你有用,我尽可能地对它进行评论。
我已经开始使用系统的输出(&#34; dsquery user&#34;);
$test = '"CN=Administrator,CN=Users,DC=domain,DC=local" "CN=Guest,CN=Users,DC=domain,DC=local" "CN=krbtgt,CN=Users,DC=Domain,DC=local" "CN=doctor.scripto,CN=Users,DC=domain,DC=local"';
为了方便我删除空格和&#34;来自字符串
$test = str_replace(' ', ',', $test);
$test = str_replace('"', '', $test);
现在我们准备拆分字符串了,所以我们得到一个数组$ teste,其元素以LDIF值开头(&#34; DC =&#34;或&#34; CN =&#34;在我们的例子中)
$teste = explode(',', $test);
由于某些用户不受欢迎,我添加了一个数组来排除它们。还要创建一个数组$ users来保存结果。
$users = array();
$exclude_users = array("Users", "doctor.scripto");
然后它只是迭代数组并拆分每个元素,所以我们得到位置0的LDIF部分和位置1的名称。添加名称,如果位置0等于CN并且位置1中的名称不在排除用户列表。
foreach ($teste as $value) {
$data = explode('=', $value);
if($data[0] == 'CN' && !in_array($data[1], $exclude_users)) {
$users[] = $data[1];
}
}
print_r($users);
结果如下:
Array ( [0] => Administrator [1] => Guest [2] => krbtgt )