欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php 操作AD 属性 有哪些 自己亲自做的 有大用 有大大用 有大大大用 有大大大大用

ad_info_ldap_get_entries_and_modify_dn_ok5.php

<?php
function
_start_with($str, $needle)
{

   
return strpos($str, $needle) === 0;

}
if (empty($_GET['gh'])) {
//    die("请在网址后加上 ?gh=八位数字 ");
}

$host= 'ldaps://192.168.2.2:636';
$port = '636';//一般都是389
$domain = 'aaa.com.cn';
$account = '11111111';


$user = '11111111@' . $domain; //域用户名
$password = 'Mypassword'; //域用户密码


$conn = ldap_connect($host);//不要写成ldap_connect($host.':'.$port)的形式
if ($conn) {
   
//设置参数
   
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); //声明使用版本3
   
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0); // Binding to ldap server
   
$bd = ldap_bind($conn, $user, $password);

   
$basedn = "OU=11T项目,OU=SJ-Site,OU=XXX集团,DC=aaaa,DC=com,DC=cn";
   
// $filter = "(objectClass=*)";//选择器
   // $filter = "(&(sAMAccountName=工号))";//选择器
   
$filter = "SamAccountName=*" ; //根据工号 比如 1111111
   //$filter="(|(sn=张三*)(givenname=李四*))";
   
   //    $justthese = array('*'); //选择要获取的用户属性
   //$justthese = array('SamAccountName','displayName'); //选择要获取的用户属性
   //AD 的常用属性  全用小写吧
   
$justthese = array(
'sn', // 姓
'givename', //名
'samaccountname',//工号
'department', //部门
'manager', //领导
'company',//公司
'objectsid',
'mail',//邮箱 电子邮件
'facsimileTelephoneNumber',    //传真
'displayname', //显示名称 比如  Huazheng Wang(王花真)
'dn', //  
'telephoneNumber', //电话
'directreports', // 下属
'memberof',  //权限组,,,隶属于
'samaccountname',
'primarygroupid', //
'dn',//完全合格名称
'cn', // 通用名称
'description', // 描述信息
'accountexpires', // 到期时间
'lastlogon', // 最后登录时间
'logoncount', // 总共登录次数
'useraccountcontrol', //    用户帐号控制,,,(普通启用,,,禁用,,,密码永不过期启用)
'lockouttime', //  锁定时间
'badpwdcount', //  用户尝试错误密码的次数  
'badPasswordTime', //  用户最后一次尝试错误密码的时间  
'whenchanged', //    AD对像最后修改时间            
'primarygroupid', //  所属的主要组的id
'whencreated', //      AD对像创建时间        
'userprincipalname', //        用户主体名称,,
//也称为用户登录名或电子邮件地址样式的标识符。UPN通常采用username@domainname的形式,其中“username”是用户的唯一标识部分,而“domainname”是域名,它可以是内部Active Directory域名或与之关联的公共Internet域名。例如,john.doe@example.com。
'distinguishedname', // 等同于 'dn'  尊贵的,正式的,杰出的 全部的名称 完全合格名称
'pwdlastset',         //密码最后修改时间
'userworkstations',     // 用户工作站      
'city',    //    用户所在的城市。
'streetaddress', //    用户的街道地址
'postalcode', //    邮政编码
'physicaldeliveryofficename', //  正式的公司名称
'userPassword', //  用户密码,是加密的
); //选择要获取的用户属性

   //$sr=ldap_search($conn, $basedn,$filter );
   
$sr = ldap_search($conn, $basedn, $filter, $justthese);
   
echo "<pre>";
   
$info = ldap_get_entries($conn, $sr);


//    print_r($info);
   
unset($info['count']);
       
print_r($info);

   
$new_info = array();
   
foreach($info as $key=>$value)
   {
//        unset($info[$key][0]);
//        unset($info[$key]['count']);
       
$new_info[$key]['samaccountname'] = $value['samaccountname'][0];
       
$new_info[$key]['dn'] = $value['dn'];
       
$displayname = strrchr($value['displayname'][0],"(");

       
$displayname = substr($displayname,strpos($displayname,"(")+1,strpos($displayname,")")-1);
       
$new_info[$key]['displayname'] = $displayname;
   }
   
foreach($new_info as $key=>$value)
   {
       
if(!_start_with($value['dn'],'CN=T')){
           
unset($new_info[$key]);
       }

       
$currentDn = $value['dn'];
       
$newParent = $suffix_dn = "OU=11T项目,OU=SJ-Site,OU=XXX集团,DC=aaaa,DC=com,DC=cn";
       
$newDn = "CN=".$value['displayname']."((".$value['samaccountname']."))";
//        $newRdn    = "CN=".$value['displayname']."(".$value['samaccountname'].")";
       // 检查新 DN 是否已存在
//        $checkDn = ldap_search($conn, $baseDn, "(distinguishedName=$newDn)");
//        if (!$checkDn) {
//            die("检查新 DN 失败: " . ldap_error($conn));
//        }
//        if (ldap_count_entries($ldapConn, $checkDn) > 0) {
//            die("新 DN $newDn 已存在,请选择其他 DN。");
//        }
//var_dump($currentDn);
//var_dump($newDn);
       
$modifyDn = ldap_rename($conn, $currentDn, $newDn, $newParent, true);
       
if (!$modifyDn) {
               
var_dump(ldap_error($conn));
               
var_dump(ldap_errno($conn));
               
ldap_get_option($conn, LDAP_OPT_ERROR_STRING, $extendedError);
               
var_dump($extendedError);
           
die("失败!");
       }
       
break;
   }
   
echo "用户 DN 已成功修改为 $newDn ";
//    var_dump($new_info);

   
echo "</pre>";

   
if ($bd) {
       
echo 'LDAP 绑定成功'; //相当于登录成功
   
} else {
       
echo 'LDAP 绑定失败';
   }
}
else {
   
echo '无法连接到AD域服务器';
}
ldap_close($conn);



普通分类: