我们针对被解雇/分居或请假的人的政策涉及对他们的 AD 帐户进行一些更改,以保持记录和安全。其中一项更改是将帐户(登录名、显示名和 dn)重命名为包含原始名称和附加服务台票号的值。
我已经能够使用 ldap_rename() 来更改活动目录的“名称”属性,从而更改 DN。我可以使用 ldap_modify() 或 ldap_mod_replace() 更改 displayName 属性。我似乎不能做的是使用其中任何一个来更改 samAccountName。下面是我正在使用的代码的核心。我得到的错误取决于我使用的功能,并在下面列出。
我知道在 Active Directory 中使用 PHP LDAP 有一些细微差别,但我很难相信我已经能够完成包括更改密码在内的所有操作,而且我无法更改 samAccountName... 帮助?
<?php
$connection=ldap_connect(domain.local,389);
ldap_set_option($connection,LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($connection,LDAP_OPT_REFERRALS,0);
ldap_start_tls($connection);
ldap_bind($connection,$username,$password);
$accountName=$_POST["accountName"];
$ticketNumber=$_POST["ticketNumber"];
$baseDn="dc=domain,dc=local";
$attribs=array("samaccountname","dn","name","displayname","description","info","memberof");
$search=ldap_search($connection,$baseDn,"(samaccountname=".$accountName.")",$attribs);
$result=ldap_get_entries($connection,$search);
// ldap_modify returns error 80: Internal (implementation specific) error.
foreach ($result as $account) {
$newValues=array("samaccountname"=>$account["samaccountname"][0]."-".$ticketNumber)
ldap_modify($connection,$account["dn"],$newValues);
}
// ldap_mod_replace returns error 80: Internal (implementation specific) error.)
foreach ($result as $account) {
$newValues=array("samaccountname"=>$account["samaccountname"][0]."-".$ticketNumber)
ldap_mod_replace($connection,$account["dn"],$newValues);
}
?>
所以,是的,我应该做些什么来实现这一点?