Как восстановить настройки GPO - PullRequest
0 голосов
/ 04 сентября 2018

Я борюсь со следующей проблемой, пытаясь получить все объекты групповой политики домена с помощью Java. Мне удалось создать подключение к Active Directory и получить объекты политики, однако я не могу получить их настройки, в которых я заинтересован.

Мне удалось получить только следующие свойства: CanonicalName CN созданный createTimeStamp удаленный Описание Отображаемое имя DistinguishedName dSCorePropagationData флаги gPCFileSysPath gPCFunctionalityVersion gPCMachineExtensionNames gPCUserExtensionNames instanceType isCriticalSystemObject IsDeleted LastKnownParent модифицированный modifyTimeStamp название nTSecurityDescriptor ObjectCategory ObjectClass ObjectGUID ProtectedFromAccidentalDeletion sDRightsEffective showInAdvancedViewOnly SystemFlags uSNChanged uSNCreated номер версии whenChanged whenCreated

Знаете, как мне решить эту проблему? Есть ли какое-либо расширенное свойство, из которого я могу получить настройки каждого объекта групповой политики?

Я не знаю, был бы полезен код, так как это просто соединение и запрос ldap:

colAttributes = {"*"};
strSearchRoot = "DC=xx,DC=xx";
this.getActiveDirectoryConnection().setRequestControl(null, Control.NONCRITICAL);
colSearchResult = this.getActiveDirectoryConnection().getQuery(colAttributes, "(ObjectClass=groupPolicyContainer)", strSearchRoot);
    while (colSearchResult.hasMoreElements())
    {
        objSearchResult = (SearchResult) colSearchResult.nextElement();
        objAttributes = objSearchResult.getAttributes();
    }

private void getActiveDirectoryConnection()
{
    return new ActiveDirectory(strDomain, strUsername, strPassword);
}

Примером, который я пытаюсь получить, является Политика домена по умолчанию, не только эта, но и все политики. И настройки проходят через настройки пароля, такие как maxPwdAge, lockoutThreshold и т. Д. Настройки экрана и питания, между другими

import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.PagedResultsControl;
import javax.naming.ldap.PagedResultsResponseControl;
public class ActiveDirectory
{
    private LdapContext objLDAPContext;
    public ActiveDirectory(String strURL, String strUserName, String strPassword) throws NamingException
    {
        Hashtable<String, Object> objEnvironment;
        objEnvironment = new Hashtable<String, Object>(11);
        objEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        objEnvironment.put(Context.PROVIDER_URL,  strURL);
        objEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple");
        objEnvironment.put(Context.SECURITY_PRINCIPAL, strUserName);
        objEnvironment.put(Context.SECURITY_CREDENTIALS, strPassword);
        objEnvironment.put("java.naming.ldap.attributes.binary", "objectGUID");
        try
        {
            this.objLDAPContext = new InitialLdapContext(objEnvironment, null);
        }
        catch (NamingException objException)
        {
            System.setProperty("javax.net.ssl.trustStore", "certificates".concat(File.separator).concat("cacerts"));
            objEnvironment.put(Context.PROVIDER_URL, strURL.replace("LDAP:", "LDAPS:").replace(":389", ":636"));
        }
        this.objLDAPContext = new InitialLdapContext(objEnvironment, null);
    }
    private LdapContext getContext()
    {
        return this.objLDAPContext;
    }
    public NamingEnumeration<SearchResult> getQuery(String[] colAttributes, String strLDAPFilter, String strSearchRoot) throws NamingException
    {
        NamingEnumeration<SearchResult> objAnswer;
        SearchControls objSearchControls = new SearchControls();
        objSearchControls.setReturningAttributes(colAttributes);
        objSearchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        objAnswer = this.getContext().search(strSearchRoot, strLDAPFilter, objSearchControls);
        return objAnswer;
    }
    public void close() throws NamingException
    {
        this.getContext().close();
    }
    public void setRequestControl(byte[] objCookie, boolean bolControl)
    {
        int intPageSize;
        intPageSize = 1000;
        try
        {
            this.getContext().setRequestControls(new Control[]
            {
                new PagedResultsControl(intPageSize, objCookie, bolControl)
            });
        }
        catch(NamingException | IOException objException)
        {
            //No more pages could be recovered
        }
    }
    public byte[] getCookie()
    {
        byte[] objCookie;
        objCookie = null;
        try
        {
            Control[] objControl = this.getContext().getResponseControls();
            if (objControl != null)
            {
                for (int intCounter = 0; intCounter < objControl.length; intCounter++)
                {
                    if (objControl[intCounter] instanceof PagedResultsResponseControl)
                    {
                        PagedResultsResponseControl objPagedControl = (PagedResultsResponseControl) objControl[intCounter];
                        objCookie = objPagedControl.getCookie();
                    }
                }
            }
        }
        catch(NamingException objException)
        {
            //Skip errors null cookie will be handled
        }
        return objCookie;
    }
}
...