Пример #1
0
        internal static ADEntity DiscoverDomainController(string siteName, string domainName, ADDiscoverableService[] servicesToFind, ADDiscoverDomainControllerOptions discoverOptions, ADMinimumDirectoryServiceVersion?minDSVersion)
        {
            DOMAIN_CONTROLLER_INFO structure;
            string domainControllerName;
            IntPtr zero = IntPtr.Zero;
            uint   num  = 0;

            if (servicesToFind.Length != 0)
            {
                ADDiscoverableService[] aDDiscoverableServiceArray = servicesToFind;
                for (int i = 0; i < (int)aDDiscoverableServiceArray.Length; i++)
                {
                    ADDiscoverableService aDDiscoverableService  = aDDiscoverableServiceArray[i];
                    ADDiscoverableService aDDiscoverableService1 = aDDiscoverableService;
                    if (aDDiscoverableService1 == ADDiscoverableService.PrimaryDC)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.PdcRequired);
                    }
                    else if (aDDiscoverableService1 == ADDiscoverableService.GlobalCatalog)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.GCRequired);
                    }
                    else if (aDDiscoverableService1 == ADDiscoverableService.KDC)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.KdcRequired);
                    }
                    else if (aDDiscoverableService1 == ADDiscoverableService.TimeService)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.TimeServerRequired);
                    }
                    else if (aDDiscoverableService1 == ADDiscoverableService.ReliableTimeService)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.GoodTimeServerPreferred);
                        num = num | Convert.ToUInt32(ADLocatorFlags.TimeServerRequired);
                    }
                    else if (aDDiscoverableService1 == ADDiscoverableService.ADWS)
                    {
                        num = num | Convert.ToUInt32(ADLocatorFlags.WebServiceRequired);
                    }
                    else
                    {
                        object[] str = new object[1];
                        str[0] = (object)aDDiscoverableService.ToString();
                        throw new ADException(string.Format(CultureInfo.CurrentCulture, StringResources.UnsupportedOptionSpecified, str));
                    }
                }
            }
            ADMinimumDirectoryServiceVersion valueOrDefault = minDSVersion.GetValueOrDefault();

            if (minDSVersion.HasValue)
            {
                switch (valueOrDefault)
                {
                case ADMinimumDirectoryServiceVersion.Windows2000:
                {
                    num = num | Convert.ToUInt32(ADLocatorFlags.DirectoryServicesRequired);
                    break;
                }

                case ADMinimumDirectoryServiceVersion.Windows2008:
                {
                    num = num | Convert.ToUInt32(ADLocatorFlags.DirectoryServices6Required);
                    break;
                }

                case ADMinimumDirectoryServiceVersion.Windows2012:
                {
                    num = num | Convert.ToUInt32(ADLocatorFlags.DirectoryServices8Required);
                    break;
                }
                }
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.Writable) == ADDiscoverDomainControllerOptions.Writable)
            {
                num = num | Convert.ToUInt32(ADLocatorFlags.WriteableRequired);
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.AvoidSelf) == ADDiscoverDomainControllerOptions.AvoidSelf)
            {
                num = num | Convert.ToUInt32(ADLocatorFlags.AvoidSelf);
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.ForceDiscover) == ADDiscoverDomainControllerOptions.ForceDiscover)
            {
                num = num | Convert.ToUInt32(ADLocatorFlags.ForceRediscovery);
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.TryNextClosestSite) == ADDiscoverDomainControllerOptions.TryNextClosestSite)
            {
                num = num | Convert.ToUInt32(ADLocatorFlags.TryNextClosestSite);
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.ReturnDnsName) == ADDiscoverDomainControllerOptions.ReturnDnsName)
            {
                num = num | Convert.ToUInt32(ADLocatorFlags.ReturnDnsName);
            }
            if ((discoverOptions & ADDiscoverDomainControllerOptions.ReturnFlatName) == ADDiscoverDomainControllerOptions.ReturnFlatName)
            {
                num = num | Convert.ToUInt32(-2147483648);
            }
            try
            {
                int num1 = UnsafeNativeMethods.DsGetDcName(null, domainName, 0, siteName, num, out zero);
                if (num1 != 0)
                {
                    Win32Exception win32Exception = new Win32Exception(num1);
                    throw new ADException(win32Exception.Message, num1);
                }
                else
                {
                    structure = (DOMAIN_CONTROLLER_INFO)Marshal.PtrToStructure(zero, typeof(DOMAIN_CONTROLLER_INFO));
                }
            }
            finally
            {
                UnsafeNativeMethods.NetApiBufferFree(zero);
            }
            ADEntity aDEntity = new ADEntity();

            if (!structure.DomainControllerName.StartsWith("\\\\"))
            {
                domainControllerName = structure.DomainControllerName;
            }
            else
            {
                domainControllerName = structure.DomainControllerName.Substring(2);
            }
            if ((structure.Flags & 0x20000000) != 0x20000000)
            {
                aDEntity.Add("Name", domainControllerName);
            }
            else
            {
                aDEntity.Add("HostName", domainControllerName);
            }
            aDEntity.Add("Domain", structure.DomainName);
            aDEntity.Add("Forest", structure.DnsForestName);
            aDEntity.Add("Site", structure.DcSiteName);
            aDEntity.InternalProperties.Add("DiscoveryInternalPropertyDCAddress", structure.DomainControllerAddress);
            return(aDEntity);
        }
Пример #2
0
        private bool ADTargetScopeEnumerationServerPreProcessTargetCSRoutine()
        {
            object        baseObject;
            ADSessionInfo sessionInfo = this.GetSessionInfo();
            string        item        = this._cmdletParameters["Server"] as string;

            object[] objArray = this._cmdletParameters["Target"] as object[];
            for (int i = 0; i < (int)objArray.Length; i++)
            {
                object obj = objArray[i];
                if (obj as PSObject == null)
                {
                    baseObject = obj;
                }
                else
                {
                    baseObject = ((PSObject)obj).BaseObject;
                }
                string   str      = baseObject as string;
                ADEntity aDEntity = baseObject as ADEntity;
                if (aDEntity == null)
                {
                    ADScopeType?nullable       = (ADScopeType?)(this._cmdletParameters["Scope"] as ADScopeType?);
                    ADScopeType valueOrDefault = nullable.GetValueOrDefault();
                    if (nullable.HasValue)
                    {
                        switch (valueOrDefault)
                        {
                        case ADScopeType.Server:
                        {
                            this.AddSessionsMatchingServerName(str);
                            break;
                        }

                        case ADScopeType.Domain:
                        {
                            if (item == null)
                            {
                                ADDiscoverableService[] aDDiscoverableServiceArray = new ADDiscoverableService[1];
                                aDDiscoverableServiceArray[0] = ADDiscoverableService.ADWS;
                                ADMinimumDirectoryServiceVersion?nullable1 = null;
                                ADEntity aDEntity1 = DomainControllerUtil.DiscoverDomainController(null, str, aDDiscoverableServiceArray, ADDiscoverDomainControllerOptions.ReturnDnsName, nullable1);
                                this.SetPipelinedSessionInfo(new ADSessionInfo(aDEntity1["HostName"].Value as string));
                            }
                            ADDomainFactory <ADDomain> aDDomainFactory = new ADDomainFactory <ADDomain>();
                            aDDomainFactory.SetCmdletSessionInfo(this.GetCmdletSessionInfo());
                            ADDomain extendedObjectFromIdentity = aDDomainFactory.GetExtendedObjectFromIdentity(new ADDomain(str), this.GetRootDSE().DefaultNamingContext);
                            this.AddSessionsFromDomain(extendedObjectFromIdentity);
                            if (item != null)
                            {
                                break;
                            }
                            this.SetPipelinedSessionInfo(sessionInfo);
                            break;
                        }

                        case ADScopeType.Forest:
                        {
                            if (item != null)
                            {
                                ADForestFactory <ADForest> aDForestFactory = new ADForestFactory <ADForest>();
                                aDForestFactory.SetCmdletSessionInfo(this.GetCmdletSessionInfo());
                                try
                                {
                                    aDForestFactory.GetDirectoryObjectFromIdentity(new ADForest(str), null);
                                }
                                catch (ADIdentityNotFoundException aDIdentityNotFoundException1)
                                {
                                    ADIdentityNotFoundException aDIdentityNotFoundException = aDIdentityNotFoundException1;
                                    base.WriteError(this.ConstructErrorRecord(aDIdentityNotFoundException));
                                    break;
                                }
                            }
                            else
                            {
                                ADDiscoverableService[] aDDiscoverableServiceArray1 = new ADDiscoverableService[1];
                                aDDiscoverableServiceArray1[0] = ADDiscoverableService.ADWS;
                                ADMinimumDirectoryServiceVersion?nullable2 = null;
                                ADEntity aDEntity2 = DomainControllerUtil.DiscoverDomainController(null, str, aDDiscoverableServiceArray1, ADDiscoverDomainControllerOptions.ReturnDnsName, nullable2);
                                this.SetPipelinedSessionInfo(new ADSessionInfo(aDEntity2["HostName"].Value as string));
                            }
                            this.AddSessionsFromConnectedForest();
                            if (item != null)
                            {
                                break;
                            }
                            this.SetPipelinedSessionInfo(sessionInfo);
                            break;
                        }

                        case ADScopeType.Site:
                        {
                            this.AddSessionsMatchingSiteName(str);
                            break;
                        }
                        }
                    }
                }
                else
                {
                    if (aDEntity.IsSearchResult)
                    {
                        this.SetPipelinedSessionInfo(aDEntity.SessionInfo);
                        if (aDEntity as ADForest == null)
                        {
                            if (aDEntity as ADDomain == null)
                            {
                                if (aDEntity as ADDirectoryServer == null)
                                {
                                    if (aDEntity as ADReplicationSite == null)
                                    {
                                        object[] type = new object[2];
                                        type[0] = aDEntity.GetType();
                                        type[1] = "Target";
                                        base.WriteErrorBuffered(this.ConstructErrorRecord(new ParameterBindingException(string.Format(CultureInfo.CurrentCulture, StringResources.UnsupportedParameterType, type))));
                                    }
                                    else
                                    {
                                        ADReplicationSite aDReplicationSite = (ADReplicationSite)aDEntity;
                                        this.AddSessionFromSiteDN(aDReplicationSite.DistinguishedName);
                                    }
                                }
                                else
                                {
                                    ADDirectoryServer aDDirectoryServer = (ADDirectoryServer)aDEntity;
                                    this._sessionPipe.AddLast(new ADSessionInfo(aDDirectoryServer["HostName"].Value as string));
                                }
                            }
                            else
                            {
                                ADDomain aDDomain = (ADDomain)aDEntity;
                                this.AddSessionsFromDomain(aDDomain);
                            }
                        }
                        else
                        {
                            this.AddSessionsFromConnectedForest();
                        }
                        this.SetPipelinedSessionInfo(sessionInfo);
                    }
                    else
                    {
                        base.WriteErrorBuffered(this.ConstructErrorRecord(new ArgumentException(string.Format(CultureInfo.CurrentCulture, StringResources.OnlySearchResultsSupported, new object[0]))));
                    }
                }
            }
            return(true);
        }
Пример #3
0
        public static string DiscoverDCFromIdentity <T>(object identity, bool forceDiscover, out string domainDNSFromIdentity)
            where T : ADEntity, new()
        {
            string   str;
            ADEntity aDEntity;

            domainDNSFromIdentity = null;
            if (identity as T == null)
            {
                if (identity as string == null)
                {
                    str = identity.ToString();
                }
                else
                {
                    str = identity as string;
                }
            }
            else
            {
                T t = (T)identity;
                if (!t.IsSearchResult)
                {
                    if (t.Identity as ADDomain == null || !((ADDomain)t.Identity).IsSearchResult)
                    {
                        str = t.Identity.ToString();
                    }
                    else
                    {
                        str = ((ADDomain)t.Identity).DNSRoot;
                    }
                }
                else
                {
                    if ((object)t as ADDomain == null)
                    {
                        if ((object)t as ADForest == null)
                        {
                            str = t["Name"].Value as string;
                        }
                        else
                        {
                            str = t["RootDomain"].Value as string;
                        }
                    }
                    else
                    {
                        str = t["DNSRoot"].Value as string;
                    }
                }
            }
            ADDiscoverableService[] aDDiscoverableServiceArray = new ADDiscoverableService[1];
            aDDiscoverableServiceArray[0] = ADDiscoverableService.ADWS;
            try
            {
                if (!forceDiscover)
                {
                    aDEntity = DomainControllerUtil.DiscoverDomainController(null, str, aDDiscoverableServiceArray, ADDiscoverDomainControllerOptions.ReturnDnsName, new ADMinimumDirectoryServiceVersion?(ADMinimumDirectoryServiceVersion.Windows2000));
                }
                else
                {
                    aDEntity = DomainControllerUtil.DiscoverDomainController(null, str, aDDiscoverableServiceArray, ADDiscoverDomainControllerOptions.ForceDiscover | ADDiscoverDomainControllerOptions.ReturnDnsName, new ADMinimumDirectoryServiceVersion?(ADMinimumDirectoryServiceVersion.Windows2000));
                }
                if (aDEntity != null)
                {
                    domainDNSFromIdentity = str;
                    string value = (string)aDEntity["HostName"].Value;
                    return(value);
                }
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                DebugLogger.LogError("ADDomainUtil", string.Concat("DiscoverDCFromIdentity: ", exception.ToString()));
            }
            return(null);
        }