C# 在 AD 中链接组策略

标签 c# .net active-directory

如何在 AD 中设置组策略?我能够创建我的 OU,但我还需要附加组策略链接到它。这就是我目前所拥有的。

 string strOU = "OU=test454545,OU=Clients,OU=Clients,DC=domain,DC=net";
        GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
        GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
        GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);  
        GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);

        GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
        gpo.DisplayName  = "TestOutCome";
        gpSom.CreateGPOLink(-1,gpo);

这仍然没有创建 GPO 链接,但我想做的就是链接现有的 GPO,有什么想法吗?并感谢您的帮助。

好吧,更近一点,这只是创建了一个策略,实际上并没有链接现有的...

 string strGPO = "Default Security with web access";
        string strOU = "OU=test454545,OU=Clients,OU=Clients,DC=domain,DC=net";
        GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
        GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
        GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
        GPMGMTLib.GPMSearchCriteria searchOBJ = gpm.CreateSearchCriteria();
        searchOBJ.Add(gpc.SearchPropertyGPODisplayName, gpc.SearchOpEquals, strGPO);
        GPMGMTLib.GPMGPOCollection objGPOlist = gpd.SearchGPOs(searchOBJ);
        GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);
        GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
        gpSom.CreateGPOLink(-1,gpo);

更新和工作:

这是为了使用 C# 将现有 GPO 链接到 OU
1)安装http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=0a6d4c24-8cbd-4b35-9272-dd3cbfc81887
2)引用gpmgmt.dll(在安装目录下找到)
3) 你可能需要安装 .Net 1.1
4) 添加对VS的引用
5)添加使用GPMGMTLib;使用 GPOADMINLib;转换

            string strGPO = "Default Security with web access";
        string strOU = "OU=test454545,OU=Clients,OU=clients,DC=domainh,DC=net";
        GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
        GPMGMTLib.GPMConstants gpc = gpm.GetConstants();
        GPMGMTLib.GPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
        GPMGMTLib.GPMSearchCriteria searchOBJ = gpm.CreateSearchCriteria();
        searchOBJ.Add(gpc.SearchPropertyGPODisplayName, gpc.SearchOpEquals, strGPO);
        GPMGMTLib.GPMGPOCollection objGPOlist = gpd.SearchGPOs(searchOBJ);
        GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(strOU);
        GPMGMTLib.GPMGPO gpo = gpd.CreateGPO();
        gpSom.CreateGPOLink(-1,objGPOlist[1]);

最佳答案

看看这个link

它包含大量示例脚本,您需要从 GPOAdmin.dll 添加对 GPO Admin 1.0 类型库的引用 (COM)。

讨论了类似的问题here使用 C# 中的示例脚本

编辑:

引用 gpmgmt.dll 作为 COM interop 并使用如下代码:

Public Function CreateAndLinkGPO(ByVal strDomain As String, ByVal strOU As String, ByVal strGPOName As String)
    Dim gpm As New GPM()
    Dim gpmConst As GPMConstants = gpm.GetConstants()
    Dim domain As GPMDomain = gpm.GetDomain(strDomain, "", gpmConst.UseAnyDC)
    Dim som As GPMSOM = domain.GetSOM(strOU)

    'create new GPO
    Dim gpo As GPMGPO = domain.CreateGPO()
    gpo.DisplayName = strGPOName 

    'create link to OU
    som.CreateGPOLink(-1, gpo)

    CreateAndLinkGPO = gpo
End Function

这是在 VB.NET 中,但可以很容易地移植到由 MSFT poster from here 发布的 C# .我觉得关键是。 CreateGPOLink , GPMSOM是您的 OU(检索代表指定路径上的域或组织单位 (OU) 的 IGPMSOM 接口(interface)。)

关于C# 在 AD 中链接组策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312157/

相关文章:

c# - 有什么工具可以为我们改变解决方案中的所有引用?

.net - 动态添加的 Web.UI.ITemplate 类的最佳实践

c# - 以编程方式检查 NuGet 包中经过身份验证的文件

c# - 如何在 C# 中从 Active Directory 获取自定义字段?

用于在 AD 中查询特定 OU 的计算机名称并导出的 Powershell 脚本

c# - Active Directory 登录 - DirectoryEntry 不一致异常

c# - 集合查找;字典的替代品

c# - 整数值的 DataView LIKE 函数

c# - 为我发送的每条消息创建 EventHubClient 是否正确?

c# - 是否可以将传递给.NET方法的变量的类型限制为不是派生类?