Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检索GPO设置_Java_Ldap_Gpo - Fatal编程技术网

Java 如何检索GPO设置

Java 如何检索GPO设置,java,ldap,gpo,Java,Ldap,Gpo,在尝试用Java检索域的所有GPO时,我遇到了以下问题。我能够创建到Active Directory的连接并获取策略对象,但是我无法检索我感兴趣的它们的设置 我只能检索以下属性: 规范名称 CN 创建 创建时间戳 删除 描述 显示名称 区分名称 dSCorePropagationData 旗帜 gPCFileSysPath GPC功能性版本 gPCMachineExtensionNames gPCUserExtensionNames 实例类型 isCriticalSystemObject 删除

在尝试用Java检索域的所有GPO时,我遇到了以下问题。我能够创建到Active Directory的连接并获取策略对象,但是我无法检索我感兴趣的它们的设置

我只能检索以下属性: 规范名称 CN 创建 创建时间戳 删除 描述 显示名称 区分名称 dSCorePropagationData 旗帜 gPCFileSysPath GPC功能性版本 gPCMachineExtensionNames gPCUserExtensionNames 实例类型 isCriticalSystemObject 删除 最后的知识租金 被改进的 修改时间戳 名称 nTSecurityDescriptor 对象类别 对象类 对象GUID 防止意外删除 有效的 仅显示高级视图 系统标志 改变 创造的 版本号 当改变 加热时

你知道我该如何面对这个问题吗?是否有任何扩展属性可以从中检索每个GPO的设置

我不知道该代码是否有用,因为它只是一个连接和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;
    }
}
导入java.io.File;
导入java.io.IOException;
导入java.util.Hashtable;
导入javax.naming.Context;
导入javax.naming.NamingEnumeration;
导入javax.naming.NamingException;
导入javax.naming.directory.SearchControls;
导入javax.naming.directory.SearchResult;
导入javax.naming.ldap.Control;
导入javax.naming.ldap.InitialLdapContext;
导入javax.naming.ldap.LdapContext;
导入javax.naming.ldap.PagedResultsControl;
导入javax.naming.ldap.PagedResultsResponseControl;
公共类ActiveDirectory
{
私有LdapContext对象上下文;
公共ActiveDirectory(字符串strURL、字符串strUserName、字符串strPassword)引发NamingException
{
哈希表环境;
objEnvironment=新哈希表(11);
put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
put(Context.PROVIDER\uURL,strURL);
put(Context.SECURITY_身份验证,“simple”);
objEnvironment.put(Context.SECURITY\u PRINCIPAL,strustername);
put(Context.SECURITY\u凭证,strPassword);
put(“java.naming.ldap.attributes.binary”、“objectGUID”);
尝试
{
this.objLDAPContext=new InitialLdapContext(objEnvironment,null);
}
捕获(NamingException对象异常)
{
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);
}
私有LdapContext getContext()
{
返回this.objLDAPContext;
}
公共NamingEnumeration getQuery(字符串[]colAttributes、字符串strLDAPFilter、字符串strSearchRoot)引发NamingException
{
NamingEnumeration objAnswer;
SearchControls objSearchControls=新的SearchControls();
设置返回属性(colAttributes);
objSearchControls.setSearchScope(SearchControls.SUBTREE_范围);
objAnswer=this.getContext().search(strSearchRoot、strLDAPFilter、objSearchControls);
返回objAnswer;
}
public void close()引发NamingException
{
this.getContext().close();
}
public void setRequestControl(字节[]objCookie,布尔值bolControl)
{
intPageSize;
intPageSize=1000;
尝试
{
this.getContext().setRequestControls(新控件[])
{
新的PagedResultsControl(intPageSize、objCookie、bolControl)
});
}
捕获(NamingException | IOException对象异常)
{
//无法恢复更多页面
}
}
公共字节[]getCookie()
{
字节[]objCookie;
objCookie=null;
尝试
{
Control[]objControl=this.getContext().getResponseControl();
if(objControl!=null)
{
for(int-intCounter=0;intCounter
1显示您的代码。2至少列出一些您想要的策略对象。3.它们已经设置好了吗?如果未设置对象,该对象是否有值?好的,“this.getActiveDirectoryConnection()”做什么?它只是创建一个LDAPContext。可用于对Active Directory进行查询的。在本例中,已经创建了上下文,我进行了一个LDAP查询,该查询检索(ObjectClass=groupPolicyContainer)的所有属性。查询工作正常,我只是无法获得所需的属性。我正在尝试复制您的代码,以便对其进行测试。如果我使用相同的代码访问Active Directory会更好。