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); } }
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); }
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); }
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); }