使用 System.DirectoryServices.DirectoryEntry(ADLDS、ADAM、Active Directory 应用程序模式)为新 AD 用户设置密码永不过期
Setting Password Never Expires for new AD user using System.DirectoryServices.DirectoryEntry (ADLDS, ADAM, Active Directory Application Mode)
我已经看到 this question 并尝试使用 "userPrincipalName" 和 "userFlags",并且在这两种情况下我都收到了 "The specified directory service attribute or value does not exist"。
我可以在 Powershell 中使用以下设置属性
Get-ADUser -Filter 'cn -like "*username*"' -Server <serveraddrress> -SearchBase "<searchbase>" | Set-ADUser -PasswordNeverExpires:$True
我的 C# 代码如下,如果我删除行设置 userAccountControl,它工作正常,但它创建的用户密码永不过期 = FALSE
using (var dirEntry = entry.Children.Add("CN=" + username, "user"))
{
dirEntry.Properties["userPrincipalName"].Value = string.Format("{0}@principal", username);
dirEntry.CommitChanges();
dirEntry.Options.PasswordPort = port;
dirEntry.Options.PasswordEncoding = PasswordEncodingMethod.PasswordEncodingClear;
dirEntry.Invoke("SetPassword", password);
if (!string.IsNullOrEmpty(email))
dirEntry.Properties["mail"].Value = email;
dirEntry.Properties["msDS-UserAccountDisabled"].Value = "FALSE";
//this doesn't work with both "userAccountControl" and "userFlags"
dirEntry.Properties["userAccountControl"].Value = (int)(dirEntry.Properties["userAccountControl"].Value ?? 0) | 0x10000;
dirEntry.CommitChanges();
}
您是否在使用 Active Directory 应用程序模式 (ADAM)?这句话让我觉得你是:
dirEntry.Properties["msDS-UserAccountDisabled"].Value = "FALSE";
普通 Active Directory 中不存在该属性。因此,如果这对您有用,那么您正在使用 ADAM。
如果您使用的是 ADAM,则使用 msDS-UserDontExpirePassword
属性使密码不会过期:
dirEntry.Properties["msDS-UserDontExpirePassword"].Value = true;
如果您没有使用 ADAM,则 "msDS-UserAccountDisabled
不存在,您不应该使用它。相反,使用 userAccountControl
来设置两者。
由于您刚刚创建了帐户,因此您无需担心该值已经是多少,您只需将其设置为特定值即可。假设你想用 "don't expire password" 标志启用它,那么你可以使用这个:
//NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
dirEntry.Properties["userAccountControl"].Value = 0x0200 | 0x10000;
您可以像这样将每个值分开,或者只使用 66048
.
的结果十进制值
我已经看到 this question 并尝试使用 "userPrincipalName" 和 "userFlags",并且在这两种情况下我都收到了 "The specified directory service attribute or value does not exist"。
我可以在 Powershell 中使用以下设置属性
Get-ADUser -Filter 'cn -like "*username*"' -Server <serveraddrress> -SearchBase "<searchbase>" | Set-ADUser -PasswordNeverExpires:$True
我的 C# 代码如下,如果我删除行设置 userAccountControl,它工作正常,但它创建的用户密码永不过期 = FALSE
using (var dirEntry = entry.Children.Add("CN=" + username, "user"))
{
dirEntry.Properties["userPrincipalName"].Value = string.Format("{0}@principal", username);
dirEntry.CommitChanges();
dirEntry.Options.PasswordPort = port;
dirEntry.Options.PasswordEncoding = PasswordEncodingMethod.PasswordEncodingClear;
dirEntry.Invoke("SetPassword", password);
if (!string.IsNullOrEmpty(email))
dirEntry.Properties["mail"].Value = email;
dirEntry.Properties["msDS-UserAccountDisabled"].Value = "FALSE";
//this doesn't work with both "userAccountControl" and "userFlags"
dirEntry.Properties["userAccountControl"].Value = (int)(dirEntry.Properties["userAccountControl"].Value ?? 0) | 0x10000;
dirEntry.CommitChanges();
}
您是否在使用 Active Directory 应用程序模式 (ADAM)?这句话让我觉得你是:
dirEntry.Properties["msDS-UserAccountDisabled"].Value = "FALSE";
普通 Active Directory 中不存在该属性。因此,如果这对您有用,那么您正在使用 ADAM。
如果您使用的是 ADAM,则使用 msDS-UserDontExpirePassword
属性使密码不会过期:
dirEntry.Properties["msDS-UserDontExpirePassword"].Value = true;
如果您没有使用 ADAM,则 "msDS-UserAccountDisabled
不存在,您不应该使用它。相反,使用 userAccountControl
来设置两者。
由于您刚刚创建了帐户,因此您无需担心该值已经是多少,您只需将其设置为特定值即可。假设你想用 "don't expire password" 标志启用它,那么你可以使用这个:
//NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
dirEntry.Properties["userAccountControl"].Value = 0x0200 | 0x10000;
您可以像这样将每个值分开,或者只使用 66048
.