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

这里的技术是共享的

You are here

custom_nineteen_ad_info.module 我自己亲自做的模块 MM查询MMAD计算机信息 功能的实现 有大用 有大大用 有大大大用

 MM查询MMAD计算机信息 功能的实现 

<?php    
function custom_nineteen_ad_info_menu()    
{    
    $items['query_ad_computer_info'] = array(    
        'title' => 'MMM查询MMMAD计算机信息(支持开始精确,结尾模糊查询,仅查计算机名称,查询范围为所有计算机)',    
        'pagecallback' => 'custom_nineteen_ad_info_query_ad_computer_info',    
        'accessarguments' => array('createwp_blog_clone_2content'),    
    );    
    return $items;    
}        
function custom_nineteen_ad_info_query_ad_computer_info($diqu = 'js')    
{    
    $form = drupal_get_form('ad_computer_form');    
    $ad_computer = _removeCnEnSpace($_GET['ad_computer']);    
    $diqu = _my_node_jses_terminal_manager_diqu();    
    if (empty(_removeCnEnSpace($_GET['ad_computer'])))//没有$_GET表单提交时    
    {    
        $output = array(    
            'first_para' => $form,    
            'fourth_para' => array(    
                '#type' => 'markup',    
                '#markup' => '',    
            ),    
        );    
        return $output;    
    }    
    $ad_computer_output = _get_ad_computer($ad_computer, $diqu);//查询计算机名称的时候,不保存,,    
    if (!empty($ad_computer) && empty($ad_computer_output)) {    
        drupal_set_message('未查到此的计算机的AD信息!,此计算机为:' . $ad_computer);    
    }    
//module_load_include('inc','user','user.pages');    
    $output = array(    
        'first_para' => $form,    
        'fourth_para' => array(    
            '#type' => 'markup',    
            '#markup' => $ad_computer_output,    
        ),    
    );    
    return $output;    
}    
function  ad_computer_form()    
{    
    if (!empty($_GET['ad_computer'])) {    
        $ad_computer = $_GET['ad_computer'];    
    } else {    
        $ad_computer = '';    
    }    
    $form['ad_computer'] = array(    
        '#type' => 'textfield',    
        '#title' => t('计算机名称'),    
        '#size' => 30,    
        '#default_value' => $ad_computer,    
    );    
    $form['diqu'] = array('#type' => 'hidden', '#value' => _my_node_jses_terminal_manager_diqu());    
    $form['#method'] = 'GET';    
//提交按钮//    
    $form['submit'] = array('#type' => 'submit', '#value' => t('查询'));    
    return $form;    
}     
//判断nodejses_terminal_manager是MMM的还是YY的    
function  _my_node_jses_terminal_manager_diqu($nid = '')    
{    
    if (!empty($nid))//存在nid时,以nid来判断jses_terminal_manager所在地区    
    {    
        $tmp_node = node_load($nid);    
        return $tmp_node->field_diqu['und'][0]['value'];    
    } else {//不存在nid时,以$_GET来判断jses_terminal_manager所在地区    
        if ($_GET['diqu'] == 'ks') {    
            return 'ks';    
        } else {    
            return 'js';    
        }    
    }    
}    
//_get_ad_computer时我们不保存    
function  _get_ad_computer($gh, $diqu = 'js')    
{    
    $output = '';    
    $ad_computer_infos = _get_ad_computer_from_ad($gh, array('*'), $diqu);//精确查询的时候    
    if (empty($ad_computer_infos)) {    
//当精确查询,查不到数据的时候,我们用模糊查询    
        $ad_computer_infos = _get_ad_computer_from_ad($gh, array('*'), $diqu, true);//最后一个参数true表示模糊查询    
        unset($ad_computer_infos['count']);    
        $results = array();    
        foreach ($ad_computer_infos as $key => $value) {    
            $results[] = "<a href='/query_ad_computer_info?gh={$value['cn'][0]}'target='_blank'>" . $value['cn'][0] . "</a>";    
        }    
        $output .= implode("<br/>", $results);    
        return $output;    
    } else {//查询结果为一个计算机的时候    
        $output .= '计算机名称:';    
        $output .= $ad_computer_infos['cn'][0] . "<br/>";    
        $output .= '全称:';    
        $output .= $ad_computer_infos['distinguishedname'][0] . "<br/>";    
        $output .= '操作系统版本:';    
        $output .= $ad_computer_infos['operatingsystem'][0] . "&nbsp;&nbsp;&nbsp;&nbsp;" . $ad_computer_infos['operatingsystemversion'][0] . "<br/>";    
//获取当前时间加60天的Unix时间戳    
        $expireTimestamp = strtotime('+60days');    
//将Unix时间戳转换为Windows文件时间    
//$windowsEpoch=11644473600;//Unix时间戳(1601-01-0100:00:00UTC)    
//$accountExpires=($expireTimestamp+$windowsEpoch)*10000000;    
        $output .= '过期日期:';    
        if ($ad_computer_infos['accountexpires'][0] == "9223372036854775807") {    
            $output .= "永不过期" . "<br/>";    
        } else {    
            $output .= date('Y-m-dH:i:s', intval($ad_computer_infos['accountexpires'][0] / (1000 * 10000)) - 11644473600) . "<br/>";    
        }    
        $output .= '最后登录时间:';    
        $output .= date('Y-m-dH:i:s', intval($ad_computer_infos['lastlogontimestamp'][0] / (1000 * 10000)) - 11644473600) . "<br/>";    
        $output .= '登录次数:';    
        $output .= $ad_computer_infos['logoncount'][0] . "<br/>";    
        $output .= '完整名称:';    
        $output .= $ad_computer_infos['dnshostname'][0] . "<br/>";    
        $output .= '创建时间:';    
        $dateStr = substr($ad_computer_infos['whencreated'][0], 0, -3);//去掉最后3个字符(.0Z)    
        $date = DateTime::createFromFormat('YmdHis', $dateStr, newDateTimeZone('UTC'));    
        $date->setTimezone(newDateTimeZone('Asia/Shanghai'));    
        $output .= $date->format('Y-m-dH:i:s') . "<br/>";    
        $output .= '修改时间:';    
        $dateStr = substr($ad_computer_infos['whenchanged'][0], 0, -3);//去掉最后3个字符(.0Z)    
        $date = DateTime::createFromFormat('YmdHis', $dateStr, newDateTimeZone('UTC'));    
        $date->setTimezone(newDateTimeZone('Asia/Shanghai'));    
        $output .= $date->format('Y-m-dH:i:s') . "<br/>";    
    }    
    return $output;    
}    

//$muhu为true表示模粗查询,,,,,默认情况下为false,即不是模糊查询,是粗确查询!    
function _get_ad_computer_from_ad($ad_computer = '', $ad_user_property = array('*'), $diqu = 'js', $muhu = false)    
{    
    $ad_connect_infos = _my_get_ad_connect_infos();    
    $ad_user = $ad_connect_infos[$diqu]['ad_user'];//域用户名包含域名    
    $ad_pwd = $ad_connect_infos[$diqu]['ad_pwd'];    
    $host = $ad_connect_infos[$diqu]['host'];    
    $port = $ad_connect_infos[$diqu]['port'];//一般都是389    
    $conn = ldap_connect($host, $port);//不要写成ldap_connect($host.':'.$port)的形式    
    if ($conn) {    
//设置参数    
        ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);//声明使用版本3    
        ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);//Bindingtoldapserver    
        $bd = ldap_bind($conn, $ad_user, $ad_pwd);    
        $basedn = $ad_connect_infos[$diqu]['basedn'];    
        $basedn = 'OU=Computer,DC=mmmmmm,DC=com,DC=cn';    
//$filter="(objectClass=*)";//选择器    
//$filter="(&(sAMAccountName=张三))";//选择器    
        if ($muhu) {//模糊查询    
//$filter="(sAMAccountName=11111111)";//选择器表示模糊查询工号中包含有1111    
            $filter = "(&(cn={$ad_computer}*)(objectClass=computer))";    
        } else {//精确查询    
            $filter = "(&(cn={$ad_computer})(objectClass=computer))";//根据计算机名称比如11111    
        }    
//$filter="(|(sn=张三*)(givenname=张三*))";    
//$justthese=array('*');//选择要获取的用户属性    
        $justthese = $ad_user_property;//选择要获取的用户属性    
//$sr=ldap_search($conn,$basedn,$filter);    
        $sr = ldap_search($conn, $basedn, $filter, $justthese);    
        $infos = ldap_get_entries($conn, $sr);    
        if ($infos['count'] == 1)//只取到一个数据,,基本应该用的是精确查询,而不是模糊查询    
        {    
            $ad_computer_info = $infos[0];    
        } elseif ($infos['count'] == 0)//未取到数据    
        {    
            $ad_computer_info = '';    
        } else {//取到多个数据    
            $ad_computer_info = $infos;    
        }    
        if ($bd) {    
//drupal_set_message('LDAP连接成功');//相当于登录成功    
        } else {    
            $ad_computer_info = false;    
            drupal_set_message('LDAP连接失败', 'warning');    
        }    
    } else {    
        $ad_computer_info = false;    
        drupal_set_message('无法连接到AD域服务器', 'error');    
    }    
    ldap_close($conn);    
//YY的就不处理了吧    
//if(empty($ad_info)){//这就是为了YY的与MM的工号相同时进行的处理    
//if($diqu=='ks'&&strlen($ad_computer_info)==9&&_startWith($ad_computer_info,"C")){    
//return_get_ad_info_from_ad(_make_ks_gh_reduce_C($ad_computer_info),$ad_user_property,$diqu);    
//}    
//}    
    return $ad_computer_info;    
}    
//得到MMAD的连接信息    
//得到YYAD的连接信息    
function _my_get_ad_connect_infos()    
{    
    $js_ad_connect_arr = _my_get_js_ad_connect_arr();    
    $ad_user = $js_ad_connect_arr['user'] . '@' . $js_ad_connect_arr['domain'];    
    $ad_pwd = $js_ad_connect_arr['password'];    
    $host = $js_ad_connect_arr['host'];    
    $host_ldaps = $js_ad_connect_arr['host_ldaps'];    
    $port = $js_ad_connect_arr['port'];//一般都是389    
    $basedn = $js_ad_connect_arr['basedn'];    
    $basedn_group = $js_ad_connect_arr['basedn_group'];    
    $basedn_group1 = $js_ad_connect_arr['basedn_group1'];    
    $js_ad_connect_info = compact('ad_user', 'ad_pwd', 'host', 'host_ldaps', 'port', 'basedn', 'basedn_group', 'basedn_group1'); 
    $ks_ad_connect_arr = _my_get_ks_ad_connect_arr();    
    $ad_user = $ks_ad_connect_arr['user'] . '@' . $ks_ad_connect_arr['domain'];    
    $ad_pwd = $ks_ad_connect_arr['password'];    
    $host = $ks_ad_connect_arr['host'];    
    $host_ldaps = $ks_ad_connect_arr['host_ldaps'];    
    $port = $ks_ad_connect_arr['port'];//一般都是389    
    $basedn = $ks_ad_connect_arr['basedn'];    
    $basedn_group = $ks_ad_connect_arr['basedn_group'];    
    $ks_ad_connect_info = compact('ad_user', 'ad_pwd', 'host', 'host_ldaps', 'port', 'basedn', 'basedn_group');    
    return array('js' => $js_ad_connect_info, 'ks' => $ks_ad_connect_info);    
}    
?>    

   


普通分类: