C#:在 AD 中创建计算机对象失败
C#: Creating a computer object in AD fails
我创建了一个工具箱,用于在各种管理系统(包括 Active Directory)中创建计算机。这个工具箱多年来一直完美运行。从这个月开始,在 Active Directory 中创建计算机对象不再有效。我仍在寻找原因,但似乎与域控制器上的补丁有关。
创建该对象的用户没有任何更改。
当我使用以下命令使用用户凭据手动创建客户端时,它工作正常。
New-ADComputer -Name NB89991 -Path "ou=nb,ou=w10,ou=clt,ou=tier2,ou=central,dc=xy-dom,dc=xy,dc=ch" -SAMAccountName NB89991
你知道我的代码有什么问题吗?
public Boolean createComputerAccount(Client computer){
Boolean returnValue = true;
try {
if (!existComputer(computer))
{
PrincipalContext oPrincipalContext = GetPrincipalContext(computer.ou);
ComputerPrincipal computerPrincipal = new ComputerPrincipal(oPrincipalContext);
computerPrincipal.SamAccountName = computer.name;
computerPrincipal.Name = computer.name;
if (!(computer.adDescription == "")) {
computerPrincipal.Description = computer.adDescription;
}
MessageBox.Show(computerPrincipal.SamAccountName, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(computerPrincipal.Name, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
computerPrincipal.Enabled = true;
computerPrincipal.Save();
returnValue = true;
}
else {
returnValue = false;
}
}catch (Exception e){
errorMessage = "Creating a computer in Active Directory failed!\r\nPlease contact the ITCM TEAM or check the Logfile:\r\n (c:\temp\ClientToolbox.log).";
createErrorMessage(errorMessage, e);
returnValue = false;
}
return returnValue;
}
public PrincipalContext GetPrincipalContext(string sOU) {
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, domain, sOU, ContextOptions.SimpleBind, ntUser, ntUserPWD);
return oPrincipalContext;
}
错误信息:
27.12.2021 16:19:46
System.UnauthorizedAccessException: 访问被拒绝。
在System.DirectoryServices.AccountManagement.ADStoreCtx.Insert(校长)
在 System.DirectoryServices.AccountManagement.Principal.Save()
在 ClientToolbox.ActiveDirectory.createComputerAccount(客户端计算机)在 C:\Temp\Win10Toolbox\Source\AZToolboxClient\MyClasses\ActiveDirectory.cs:line 71
非常感谢!
最好的祝福
尼克
更新:2021 年 12 月 27 日:
我认为问题的发生是因为以下 Microsoft 文章。
我还不知道我必须如何更改我的代码才能再次运行。大家都知道吗?
KB5008102 是这样说的:
The sAMAccountName of a computer account whose UserAccountControl attribute contains the UF_WORKSTATION_TRUST_ACCOUNT flag must end with a single dollar sign ($).
因此您需要将 $
添加到 SamAccountName
:
computerPrincipal.SamAccountName = computer.name + "$";
我创建了一个工具箱,用于在各种管理系统(包括 Active Directory)中创建计算机。这个工具箱多年来一直完美运行。从这个月开始,在 Active Directory 中创建计算机对象不再有效。我仍在寻找原因,但似乎与域控制器上的补丁有关。 创建该对象的用户没有任何更改。 当我使用以下命令使用用户凭据手动创建客户端时,它工作正常。
New-ADComputer -Name NB89991 -Path "ou=nb,ou=w10,ou=clt,ou=tier2,ou=central,dc=xy-dom,dc=xy,dc=ch" -SAMAccountName NB89991
你知道我的代码有什么问题吗?
public Boolean createComputerAccount(Client computer){
Boolean returnValue = true;
try {
if (!existComputer(computer))
{
PrincipalContext oPrincipalContext = GetPrincipalContext(computer.ou);
ComputerPrincipal computerPrincipal = new ComputerPrincipal(oPrincipalContext);
computerPrincipal.SamAccountName = computer.name;
computerPrincipal.Name = computer.name;
if (!(computer.adDescription == "")) {
computerPrincipal.Description = computer.adDescription;
}
MessageBox.Show(computerPrincipal.SamAccountName, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(computerPrincipal.Name, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
computerPrincipal.Enabled = true;
computerPrincipal.Save();
returnValue = true;
}
else {
returnValue = false;
}
}catch (Exception e){
errorMessage = "Creating a computer in Active Directory failed!\r\nPlease contact the ITCM TEAM or check the Logfile:\r\n (c:\temp\ClientToolbox.log).";
createErrorMessage(errorMessage, e);
returnValue = false;
}
return returnValue;
}
public PrincipalContext GetPrincipalContext(string sOU) {
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, domain, sOU, ContextOptions.SimpleBind, ntUser, ntUserPWD);
return oPrincipalContext;
}
错误信息:
27.12.2021 16:19:46 System.UnauthorizedAccessException: 访问被拒绝。
在System.DirectoryServices.AccountManagement.ADStoreCtx.Insert(校长) 在 System.DirectoryServices.AccountManagement.Principal.Save() 在 ClientToolbox.ActiveDirectory.createComputerAccount(客户端计算机)在 C:\Temp\Win10Toolbox\Source\AZToolboxClient\MyClasses\ActiveDirectory.cs:line 71
非常感谢! 最好的祝福 尼克
更新:2021 年 12 月 27 日: 我认为问题的发生是因为以下 Microsoft 文章。 我还不知道我必须如何更改我的代码才能再次运行。大家都知道吗?
KB5008102 是这样说的:
The sAMAccountName of a computer account whose UserAccountControl attribute contains the UF_WORKSTATION_TRUST_ACCOUNT flag must end with a single dollar sign ($).
因此您需要将 $
添加到 SamAccountName
:
computerPrincipal.SamAccountName = computer.name + "$";