internal static MailboxDiscoverySearch UpgradeLegacySearchObject(SearchObject searchObject, MailboxDataProvider e14DataProvider, DiscoverySearchDataProvider e15DataProvider, Task.TaskErrorLoggingDelegate writeErrorDelegate, Action <LocalizedString> writeWarningDelegate) { MailboxDiscoverySearch mailboxDiscoverySearch = new MailboxDiscoverySearch(); if (e15DataProvider.Find <MailboxDiscoverySearch>(searchObject.Name) != null) { mailboxDiscoverySearch.Name = searchObject.Name + Guid.NewGuid().ToString(); } else { mailboxDiscoverySearch.Name = searchObject.Name; } mailboxDiscoverySearch.Senders = searchObject.Senders; mailboxDiscoverySearch.CreatedBy = searchObject.CreatedByEx; mailboxDiscoverySearch.Description = Strings.UpgradedSearchObjectDescription; mailboxDiscoverySearch.EndDate = searchObject.EndDate; mailboxDiscoverySearch.StartDate = searchObject.StartDate; mailboxDiscoverySearch.ExcludeDuplicateMessages = searchObject.ExcludeDuplicateMessages; mailboxDiscoverySearch.StatisticsOnly = searchObject.EstimateOnly; mailboxDiscoverySearch.IncludeUnsearchableItems = searchObject.IncludeUnsearchableItems; mailboxDiscoverySearch.IncludeKeywordStatistics = searchObject.IncludeKeywordStatistics; mailboxDiscoverySearch.Language = searchObject.Language.ToString(); mailboxDiscoverySearch.LogLevel = searchObject.LogLevel; mailboxDiscoverySearch.ManagedBy = searchObject.ManagedBy; mailboxDiscoverySearch.MessageTypes = searchObject.MessageTypes; mailboxDiscoverySearch.Query = Utils.ConvertAqsToKql(searchObject.SearchQuery, searchObject.Language); mailboxDiscoverySearch.Recipients = searchObject.Recipients; mailboxDiscoverySearch.StatusMailRecipients = searchObject.StatusMailRecipients; mailboxDiscoverySearch.ManagedByOrganization = e15DataProvider.OrganizationId.ToString(); mailboxDiscoverySearch.LegacySearchObjectIdentity = searchObject.Identity.ToString(); if (searchObject.SourceMailboxes != null && searchObject.SourceMailboxes.Count > 0) { MultiValuedProperty <string> multiValuedProperty = new MultiValuedProperty <string>(); Result <ADRawEntry>[] first = e14DataProvider.RecipientSession.ReadMultiple(searchObject.SourceMailboxes.ToArray(), new PropertyDefinition[] { ADRecipientSchema.DisplayName, ADRecipientSchema.LegacyExchangeDN, ADObjectSchema.ExchangeVersion }); foreach (ADRawEntry adrawEntry in from x in first select x.Data) { if (adrawEntry != null) { if (((ExchangeObjectVersion)adrawEntry[ADObjectSchema.ExchangeVersion]).IsOlderThan(ExchangeObjectVersion.Exchange2012)) { writeErrorDelegate(new MailboxSearchTaskException(Strings.SourceMailboxMustBeE15OrLater((string)adrawEntry[ADRecipientSchema.DisplayName])), ErrorCategory.InvalidArgument, null); } else { multiValuedProperty.Add((string)adrawEntry[ADRecipientSchema.LegacyExchangeDN]); } } } if (multiValuedProperty.Count > 0) { mailboxDiscoverySearch.Sources = multiValuedProperty; } } ADUser aduser = null; if (searchObject.TargetMailbox != null) { aduser = (ADUser)e14DataProvider.RecipientSession.Read(searchObject.TargetMailbox); if (aduser != null) { mailboxDiscoverySearch.Target = aduser.LegacyExchangeDN; } } e15DataProvider.CreateOrUpdate <MailboxDiscoverySearch>(mailboxDiscoverySearch); Exception ex = null; try { if (searchObject.SearchStatus != null) { if (!string.IsNullOrEmpty(searchObject.SearchStatus.ResultsPath) && aduser != null) { string serverFqdn = ExchangePrincipal.FromADUser(e14DataProvider.RecipientSession.SessionSettings, aduser, RemotingOptions.AllowCrossSite).MailboxInfo.Location.ServerFqdn; if (!string.IsNullOrEmpty(serverFqdn)) { goto IL_395; } Utils.< > c__DisplayClassc CS$ < > 8__locals1 = new Utils.< > c__DisplayClassc(); CS$ < > 8__locals1.searchId = new SearchId(e14DataProvider.ADUser.Id.DistinguishedName, e14DataProvider.ADUser.Id.ObjectGuid, searchObject.Id.Guid.ToString()); using (MailboxSearchClient client = new MailboxSearchClient(serverFqdn)) { Utils.RpcCallWithRetry(delegate() { client.Remove(CS$ < > 8__locals1.searchId, true); }); goto IL_395; } } e14DataProvider.Delete(searchObject.SearchStatus); } IL_395: e14DataProvider.Delete(searchObject); } catch (RpcConnectionException ex2) { ex = ex2; } catch (RpcException ex3) { ex = ex3; } catch (StoragePermanentException ex4) { ex = ex4; } catch (StorageTransientException ex5) { ex = ex5; } if (ex != null) { writeWarningDelegate(Strings.FailedToDeleteE14SearchObjectWhenUpgrade(searchObject.Name, ex.Message)); } return(e15DataProvider.FindByAlternativeId <MailboxDiscoverySearch>(searchObject.Name)); }