【问题标题】:How to list all GPOs applied to an OU included inherited ones(C#)如何列出应用于 OU 的所有 GPO,包括继承的 GPO(C#)
【发布时间】:2012-05-10 11:55:44
【问题描述】:

我正在寻找一种方法来列出通过代码应用(链接和继承)到特定 OU 的所有 GPO。

我知道有一个属性表示链接的 GPO,称为 GPLink,但它只给出直接链接的。

我搜索了谷歌,发现有一个 gpmgmt COM 对象,但我不明白如何将它用于我的目的,甚至可能。

感谢您的帮助。

【问题讨论】:

    标签: c# active-directory group-policy gpo


    【解决方案1】:

    我有以下子要分享。它不会列出 GPO 的名称,但会返回计数。一个次要的 mod 将允许您获取名称(在 foreach 循环中查看 GPOLink 的属性)。您需要安装 GPMC 并添加 gpmgmt.dll 作为项目参考。

     private string getGPOLinkCount(string OUPathDN, bool onlyEnabledLinks, bool includeInheritedLinks)
        {
            int linkCount = 0;
    
            try
            {
                GPMGMTLib.GPM gpm = new GPMGMTLib.GPM();
                GPMGMTLib.IGPMConstants gpc = gpm.GetConstants();
                GPMGMTLib.IGPMDomain gpd = gpm.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", gpc.UseAnyDC);
    
                GPMGMTLib.GPMSOM gpSom = gpd.GetSOM(OUPathDN);
    
                GPMGPOLinksCollection GPOLinks = gpSom.GetGPOLinks();
                GPMGPOLinksCollection GPOLinksIncludingInherited = gpSom.GetInheritedGPOLinks();
    
    
                if (!includeInheritedLinks)
                {
                    foreach (GPMGPOLink GPOLink in GPOLinks)
                    {
                        if (onlyEnabledLinks)
                        {
                            if (GPOLink.Enabled)
                            {
                                linkCount++;
                            }
                        }
                        if (!onlyEnabledLinks) //Get all links, disabled or enabled
                        {
                            linkCount++;
                        }
                    }                   
                }
    
                if (includeInheritedLinks)
                {
                    foreach (GPMGPOLink GPOLink in GPOLinksIncludingInherited)
                    {
                        if (onlyEnabledLinks)
                        {
                            if (GPOLink.Enabled)
                            {
                                linkCount++;
                            }
                        }
                        if (!onlyEnabledLinks) //Get all links, disabled or enabled
                        {
                            linkCount++;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return "GPO links: " + ex.Message.Replace("\r\n", "");
            }
    
            return linkCount.ToString();            
        }
    

    【讨论】:

      【解决方案2】:

      您需要向上遍历给定 OU 的每个父级,直到到达域头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        相关资源
        最近更新 更多