C # связывание групповой политики в AD - PullRequest
6 голосов
/ 15 марта 2011

Как настроить групповые политики в 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);

Это все еще не создает ссылку на объект групповой политики, но все, что я хочу сделать, это связать существующий объект групповой политики, не так ли?И спасибо за помощь.

Хорошо, ближе, это только что созданная политика на самом деле не связывает существующую ...

 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 #
1) install 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]);

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Взгляните на эту ссылку

. Она содержит множество примеров сценариев, вам нужно добавить ссылку (COM) в библиотеку типов GPO Admin 1.0 из GPOAdmin.dll.

Здесь обсуждается похожая проблема с примером сценария на C #

EDIT :

Ссылка на gpmgmt.dll какCOM взаимодействует и использует код как показано ниже:

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, но может быть легко перенесено на C #, опубликовано постером MSFT отсюда .Я думаю, что ключ. CreateGPOLink , GPMSOM - это ваша OU (извлекает интерфейс IGPMSOM, который представляет домен или организационную единицу (OU) по указанному пути.)

2 голосов
/ 19 декабря 2014

Я искал способ просто перечислить объекты групповой политики, которые связаны с определенным подразделением, этот поток мне очень помог. У меня есть следующий саб, чтобы поделиться. Он не перечисляет имена объектов групповой политики, но возвращает количество. Незначительный мод позволит вам получить имена (проверьте свойства GPOLink в цикле foreach). Вам нужно будет установить 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();            
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...