private void EnsureTenantHasAlreadyBeenUpgraded(ITaskContext taskContext)
        {
            taskContext.Logger.LogInformation(HybridStrings.HybridInfoVerifyTenantHasBeenUpgraded);
            IOrganizationConfig organizationConfig = taskContext.TenantSession.GetOrganizationConfig();

            if (organizationConfig.AdminDisplayVersion.ExchangeBuild < this.upgradeTo.ExchangeBuild || organizationConfig.IsUpgradingOrganization)
            {
                throw new LocalizedException(HybridStrings.ErrorHybridTenenatUpgradeRequired);
            }
        }
        private bool TaskConfigure(ITaskContext taskContext)
        {
            IOrganizationConfig organizationConfig = taskContext.TenantSession.GetOrganizationConfig();

            if (organizationConfig.IsDehydrated)
            {
                try
                {
                    taskContext.TenantSession.EnableOrganizationCustomization();
                }
                catch
                {
                }
            }
            if (this.RequiresFederationTrust())
            {
                if (this.updateOnPremisesFedOrgId)
                {
                    IFederatedOrganizationIdentifier federatedOrganizationIdentifier = base.OnPremisesSession.GetFederatedOrganizationIdentifier();
                    string text = (federatedOrganizationIdentifier != null && federatedOrganizationIdentifier.DelegationTrustLink != null) ? federatedOrganizationIdentifier.DelegationTrustLink.ToString() : Configuration.FederatedTrustIdentity;
                    taskContext.OnPremisesSession.SetFederationTrustRefreshMetadata(text);
                    SmtpDomain autoDiscoverHybridDomain = this.AutoDiscoverHybridDomain;
                    string     defaultDomain            = (autoDiscoverHybridDomain != null && autoDiscoverHybridDomain.Domain != null) ? autoDiscoverHybridDomain.Domain : null;
                    taskContext.OnPremisesSession.SetFederatedOrganizationIdentifier(this.accountNamespace, text, defaultDomain);
                }
                List <Uri> acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_onPremAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.OnPremisesSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorOnPremUsingConsumerLiveID);
                }
                acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_tenantAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.TenantSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorTenantUsingConsumerLiveID);
                }
                if (this.updateTenantFedOrgId)
                {
                    base.TenantSession.SetFederatedOrganizationIdentifier(this.TenantCoexistenceDomain);
                }
                foreach (string domainName in this.addOnPremisesFedDomains)
                {
                    taskContext.OnPremisesSession.AddFederatedDomain(domainName);
                }
            }
            OrganizationRelationship value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.OnPremisesSession, taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel"), this.OnpremisesFederationInfo, new SmtpDomain[]
            {
                new SmtpDomain(this.TenantCoexistenceDomain)
            }, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig));

            taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", value);
            value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.TenantSession, taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel"), this.TenantFederationInfo, this.HybridDomains, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig));
            taskContext.Parameters.Set <OrganizationRelationship>("_tenantOrgRel", value);
            return(true);
        }
        private void ValidateFopeConnectorsAreUpgraded(ITaskContext taskContext)
        {
            IOrganizationConfig     organizationConfig     = base.OnPremisesSession.GetOrganizationConfig();
            IOnPremisesOrganization onPremisesOrganization = base.TenantSession.GetOnPremisesOrganization(organizationConfig.Guid);
            IInboundConnector       inboundConnector       = base.TenantSession.GetInboundConnector(onPremisesOrganization.InboundConnector.ToString());
            IOutboundConnector      outboundConnector      = base.TenantSession.GetOutboundConnector(onPremisesOrganization.OutboundConnector.ToString());

            if (inboundConnector.ConnectorSource != TenantConnectorSource.HybridWizard || outboundConnector.ConnectorSource != TenantConnectorSource.HybridWizard)
            {
                throw new LocalizedException(HybridStrings.ErrorHybridOnPremisesOrganizationWasNotCreatedWithUpgradedConnectors);
            }
        }
Exemple #4
0
        public void SetOnPremisesOrganization(IOnPremisesOrganization configuration, IOrganizationConfig onPremisesOrgConfig, MultiValuedProperty <SmtpDomain> hybridDomains, IInboundConnector inboundConnector, IOutboundConnector outboundConnector, OrganizationRelationship tenantOrgRel)
        {
            Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization onPremisesOrganization = (Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization)configuration;
            onPremisesOrganization.HybridDomains            = hybridDomains;
            onPremisesOrganization.InboundConnector         = inboundConnector.Identity;
            onPremisesOrganization.OutboundConnector        = outboundConnector.Identity;
            onPremisesOrganization.OrganizationName         = onPremisesOrgConfig.Name;
            onPremisesOrganization.OrganizationRelationship = (ADObjectId)tenantOrgRel.Identity;
            SessionParameters sessionParameters = this.BuildParameters(configuration);

            sessionParameters.Set("Identity", configuration.Identity.ToString());
            base.RemotePowershellSession.RunCommand("Set-OnPremisesOrganization", sessionParameters);
        }
        private void UpgradeFopeConnectors(ITaskContext taskContext)
        {
            MultiValuedProperty <SmtpDomain> multiValuedProperty = new MultiValuedProperty <SmtpDomain>();

            foreach (SmtpDomain item in base.TaskContext.HybridConfigurationObject.Domains)
            {
                multiValuedProperty.Add(item);
            }
            IOrganizationConfig      organizationConfig        = base.OnPremisesSession.GetOrganizationConfig();
            List <string>            domains                   = new List <string>();
            OrganizationRelationship organizationRelationship  = TaskCommon.GetOrganizationRelationship(base.OnPremisesSession, Configuration.OnPremGetOrgRel, domains);
            OrganizationRelationship organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, Configuration.TenantGetOrgRel, domains);

            if (organizationRelationship2 == null || organizationRelationship == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            string            onPremOrgRelationshipName = TaskCommon.GetOnPremOrgRelationshipName(organizationConfig);
            string            tenantOrgRelationshipName = TaskCommon.GetTenantOrgRelationshipName(organizationConfig);
            SessionParameters sessionParameters         = new SessionParameters();
            SessionParameters sessionParameters2        = new SessionParameters();

            sessionParameters.Set("Name", onPremOrgRelationshipName);
            sessionParameters2.Set("Name", tenantOrgRelationshipName);
            base.OnPremisesSession.SetOrganizationRelationship(organizationRelationship.Identity, sessionParameters);
            base.TenantSession.SetOrganizationRelationship(organizationRelationship2.Identity, sessionParameters2);
            organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, tenantOrgRelationshipName, domains);
            if (organizationRelationship2 == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            IInboundConnector inboundConnector = base.TenantSession.GetInboundConnectors().FirstOrDefault((IInboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (inboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoInboundConnector);
            }
            base.TenantSession.RenameInboundConnector(inboundConnector, Configuration.InboundConnectorName(organizationConfig.Guid.ToString()));
            IOutboundConnector outboundConnector = base.TenantSession.GetOutboundConnectors().FirstOrDefault((IOutboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (outboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoOutboundConnector);
            }
            base.TenantSession.RenameOutboundConnector(outboundConnector, Configuration.OutboundConnectorName(organizationConfig.Guid.ToString()));
            base.TenantSession.NewOnPremisesOrganization(organizationConfig, multiValuedProperty, inboundConnector, outboundConnector, organizationRelationship2);
        }
Exemple #6
0
        public IOnPremisesOrganization NewOnPremisesOrganization(IOrganizationConfig onPremisesOrgConfig, MultiValuedProperty <SmtpDomain> hybridDomains, IInboundConnector inboundConnector, IOutboundConnector outboundConnector, OrganizationRelationship tenantOrgRel)
        {
            Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization onPremisesOrganization = new Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization(onPremisesOrgConfig.Guid, onPremisesOrgConfig.Name, hybridDomains, inboundConnector.Identity, outboundConnector.Identity, onPremisesOrgConfig.Guid.ToString(), (ADObjectId)tenantOrgRel.Identity);
            SessionParameters sessionParameters = this.BuildParameters(onPremisesOrganization);

            sessionParameters.Set("Name", onPremisesOrganization.Name);
            sessionParameters.Set("OrganizationGuid", onPremisesOrganization.OrganizationGuid);
            Microsoft.Exchange.Data.Directory.SystemConfiguration.OnPremisesOrganization onPremisesOrganization2 = base.RemotePowershellSession.RunOneCommandSingleResult <Microsoft.Exchange.Data.Directory.SystemConfiguration.OnPremisesOrganization>("New-OnPremisesOrganization", sessionParameters, false);
            if (onPremisesOrganization2 != null)
            {
                return(new Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization
                {
                    Identity = (ADObjectId)onPremisesOrganization2.Identity,
                    OrganizationGuid = onPremisesOrganization2.OrganizationGuid,
                    OrganizationName = onPremisesOrganization2.OrganizationName,
                    HybridDomains = onPremisesOrganization2.HybridDomains,
                    InboundConnector = onPremisesOrganization2.InboundConnector,
                    OutboundConnector = onPremisesOrganization2.OutboundConnector,
                    Name = onPremisesOrganization2.Name,
                    OrganizationRelationship = onPremisesOrganization2.OrganizationRelationship
                });
            }
            return(null);
        }
Exemple #7
0
 public static string GetTenantOrgRelationshipName(IOrganizationConfig orgConfig)
 {
     return(string.Format("O365 to On-premises - {0}", orgConfig.Guid.ToString()));
 }
        public override bool CheckPrereqs(ITaskContext taskContext)
        {
            if (!base.CheckPrereqs(taskContext))
            {
                return(false);
            }
            if (taskContext.HybridConfigurationObject.ExchangeVersion.ExchangeBuild.Major != taskContext.HybridConfigurationObject.MaximumSupportedExchangeObjectVersion.ExchangeBuild.Major)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridMustBeUpgraded));
                base.AddLocalizedStringError(HybridStrings.ErrorHybridMustBeUpgraded);
                return(false);
            }
            if (Configuration.RequiresIntraOrganizationConnector(taskContext.HybridConfigurationObject.ServiceInstance) && Configuration.RestrictIOCToSP1OrGreater(taskContext.HybridConfigurationObject.ServiceInstance) && !(taskContext.OnPremisesSession.GetIntraOrganizationConfiguration().DeploymentIsCompleteIOCReady ?? false))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorIncompatibleServersDetected));
                base.AddLocalizedStringError(HybridStrings.ErrorIncompatibleServersDetected);
                return(false);
            }
            if (taskContext.HybridConfigurationObject.Domains == null || taskContext.HybridConfigurationObject.Domains.Count == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoHybridDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoHybridDomains);
                return(false);
            }
            IOrderedEnumerable <string> orderedEnumerable = from d in taskContext.HybridConfigurationObject.Domains
                                                            select d.Domain into d
                                                            orderby d
                                                            select d;

            taskContext.Parameters.Set <IEnumerable <string> >("_hybridDomainList", orderedEnumerable);
            IEnumerable <IAcceptedDomain> acceptedDomain = base.TenantSession.GetAcceptedDomain();

            if (acceptedDomain.Count <IAcceptedDomain>() == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoTenantAcceptedDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoTenantAcceptedDomains);
                return(false);
            }
            taskContext.Parameters.Set <IEnumerable <IAcceptedDomain> >("_tenantAcceptedDomains", acceptedDomain);
            string text = null;

            foreach (IAcceptedDomain acceptedDomain2 in acceptedDomain)
            {
                if (acceptedDomain2.IsCoexistenceDomain)
                {
                    text = acceptedDomain2.DomainNameDomain;
                    break;
                }
            }
            if (string.IsNullOrEmpty(text))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoHybridDomain));
                base.AddLocalizedStringError(HybridStrings.ErrorNoHybridDomain);
                return(false);
            }
            taskContext.Parameters.Set <string>("_hybridDomain", text);
            IEnumerable <IAcceptedDomain> acceptedDomain3 = base.OnPremisesSession.GetAcceptedDomain();

            if (acceptedDomain3.Count <IAcceptedDomain>() == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoOnPremAcceptedDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoOnPremAcceptedDomains);
                return(false);
            }
            taskContext.Parameters.Set <IEnumerable <IAcceptedDomain> >("_onPremAcceptedDomains", acceptedDomain3);
            foreach (string domain in orderedEnumerable)
            {
                if (!GlobalPrereqTask.IsAcceptedDomain(domain, acceptedDomain))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridDomainNotAcceptedOnTenant(domain)));
                    base.AddLocalizedStringError(HybridStrings.ErrorHybridDomainNotAcceptedOnTenant(domain));
                    return(false);
                }
                if (!GlobalPrereqTask.IsAcceptedDomain(domain, acceptedDomain3))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridDomainNotAcceptedOnPrem(domain)));
                    base.AddLocalizedStringError(HybridStrings.ErrorHybridDomainNotAcceptedOnPrem(domain));
                    return(false);
                }
            }
            if (!GlobalPrereqTask.IsAcceptedDomain(text, acceptedDomain))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorCoexistenceDomainNotAcceptedOnTenant(text)));
                base.AddLocalizedStringError(HybridStrings.ErrorCoexistenceDomainNotAcceptedOnTenant(text));
                return(false);
            }
            IOrganizationConfig organizationConfig = base.OnPremisesSession.GetOrganizationConfig();
            List <string>       list = new List <string>();

            list.Add(text);
            OrganizationRelationship organizationRelationship = TaskCommon.GetOrganizationRelationship(taskContext.OnPremisesSession, TaskCommon.GetOnPremOrgRelationshipName(organizationConfig), list);

            taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", organizationRelationship);
            organizationRelationship = TaskCommon.GetOrganizationRelationship(taskContext.TenantSession, TaskCommon.GetTenantOrgRelationshipName(organizationConfig), orderedEnumerable);
            taskContext.Parameters.Set <OrganizationRelationship>("_tenantOrgRel", organizationRelationship);
            foreach (ADObjectId adobjectId in taskContext.HybridConfigurationObject.ClientAccessServers)
            {
                IExchangeServer exchangeServer = base.OnPremisesSession.GetExchangeServer(adobjectId.Name);
                if (!this.HasCASRole(exchangeServer))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorCASRoleInvalid(exchangeServer.Name)));
                    base.AddLocalizedStringError(HybridStrings.ErrorCASRoleInvalid(exchangeServer.Name));
                    return(false);
                }
            }
            return(true);
        }