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 文章。 我还不知道我必须如何更改我的代码才能再次运行。大家都知道吗?

Microsoft KB5008102

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 + "$";