寻求使用ADSI API以编程方式创建Windows组的示例

时间:2011-11-10 19:29:21

标签: windows adsi

使用ADSI API寻找示例以编程方式创建Windows组。 AD是Windows Active Directory http://en.wikipedia.org/wiki/Active_Directory

'SI'可能是服务接口?

无论如何,这个领域没有很好的记录。 。 。我见过一些PowerShell脚本。 。 。但实际上并不想确保安装PowerShell等。一个简单的程序运行并确保将MY_XYZ_GROUP添加到Window的一组组中.....

应该很容易......看起来并不那么容易。

2 个答案:

答案 0 :(得分:2)

ADSI = Active Directory Service Interfaces - 它是与Active Directory通信以在Active Directory中创建用户,组和计算机帐户的API - 基于网络的Microsoft网络LDAP目录。

那么您需要在本地计算机/服务器上创建本地用户,还是需要在Active Directory中创建组?

如果您使用.NET 3.5及更高版本进行编程,则应该查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   // do something here....     
}

// create a group 
GroupPrincipal group = new GroupPrincipal(ctx, "Group01");
// set other properties on the group here.....
group.Save();  

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!

更新:不可思议的是,新的S.DS.AM不适用于本地组:-(它仅供Active Directory使用。

如果您需要创建本地Windows组,则需要使用较旧的DirectoryEntry方法,例如:

// bind to your machine's WinNT:// provider
DirectoryEntry computer = new DirectoryEntry("WinNT://YourMachineNameHere");

// create a new local group on your computer
DirectoryEntry newGroup = computer.Children.Add("NewGroupName", "Group");

// save that group to the local machine
newGroup.CommitChanges();

// refresh the property cache so you can set properties like "Description" or others
newGroup.RefreshCache();
newGroup.Properties["description"].Value = "Description for your group....";
newGroup.CommitChanges();

Richard Mueller有great list of Excel sheets显示所有可用的属性,包括基于LDAP的Active Directory对象,以及非常有限的WinNT属性。

答案 1 :(得分:1)

NetLocalGroupAddMembers(Windows API)是我正在寻找的API,与ADSI方法相比,使用的工作少得多。按照MSDN中的说明进行编码,测试和工作。

不清楚为什么我的所有相关和广泛的互联网搜索都没有这个API - 一个原因是我不包括'本地'。

以下是MSDN链接: http://msdn.microsoft.com/en-us/library/windows/desktop/aa370436(v=VS.85).aspx