0

コードを使用して、特定の OU に適用された (リンクおよび継承された) すべての GPO を一覧表示する方法を探しています。

GPLink と呼ばれるリンクされた GPO を表す属性があることは知っていますが、直接リンクされたものしか提供しません。

Google を検索したところ、gpmgmt COM オブジェクトがあることがわかりましたが、目的のためにそれを使用する方法と、それが可能かどうかさえ理解できませんでした。

助けてくれてありがとう。

4

2 に答える 2

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();            
    }
于 2014-12-19T13:14:20.677 に答える
0

ドメイン ヘッドに到達するまで、特定の OU の各親を上方に反復する必要があります。

于 2012-05-10T16:21:26.143 に答える