.net 阻止Active Directory用户使用DirectoryServices更改其密码

.net 阻止Active Directory用户使用DirectoryServices更改其密码,.net,python,active-directory,.net,Python,Active Directory,当从脚本创建Active Directory用户时,我还需要设置一个选项,即他们不能更改密码。通过管理GUI,通过检查用户无法更改密码,可以轻松完成此操作。然而,从编程角度来说,这是另一回事。我发现了一个涉及与ADSI COM API交互的应用程序,但出于技术原因,我希望通过.NET API短版本实现同样的功能:我无法从脚本访问ADSI COM API 我已经尝试将上述配方翻译成纯.NET,正如在这个Python代码片段中所看到的,但不幸的是,它没有效果: dir_entry = System.

当从脚本创建Active Directory用户时,我还需要设置一个选项,即他们不能更改密码。通过管理GUI,通过检查用户无法更改密码,可以轻松完成此操作。然而,从编程角度来说,这是另一回事。我发现了一个涉及与ADSI COM API交互的应用程序,但出于技术原因,我希望通过.NET API短版本实现同样的功能:我无法从脚本访问ADSI COM API

我已经尝试将上述配方翻译成纯.NET,正如在这个Python代码片段中所看到的,但不幸的是,它没有效果:

dir_entry = System.DirectoryServices.DirectoryEntry(ad_user)
obj_sec = dir_entry.ObjectSecurity
# Password GUID
guid = System.Guid(System.String("ab721a53-1e2f-11d0-9819-00aa0040529b"))
for identity in (r"NT AUTHORITY\SELF", "EVERYONE"):
    identity = System.Security.Principal.NTAccount(identity)
    access_rule = System.DirectoryServices.ActiveDirectoryAccessRule(
            identity,
            System.DirectoryServices.ActiveDirectoryRights.ExtendedRight,
            System.Security.AccessControl.AccessControlType.Deny,
            guid
            )
    obj_sec.AddAccessRule(access_rule)
dir_entry.ObjectSecurity = obj_sec
dir_entry.CommitChanges()

非常感谢您的帮助:

如果您可以使用.NET 3.5,则其中有一个名为System.DirectoryServices.AccountManager的新命名空间。该名称空间中的UserPrincipal类将允许您通过将布尔属性设置为false来设置无法更改密码。

谢谢,看起来非常有趣。我必须看看是否可以通过Python for.NET桥使用该.NET版本。