public static MailboxDatabase ChooseTargetMDB(IEnumerable <ADObjectId> excludedDatabaseIds, bool checkInitialProvisioningSetting, ADUser adUser, Fqdn domainController, ScopeSet scopeSet, Action <LocalizedString> writeVerbose, Action <LocalizedException, ExchangeErrorCategory, object> writeExchangeError, Action <Exception, ErrorCategory, object> writeError, object identity)
        {
            MailboxProvisioningConstraint   mailboxProvisioningConstraint   = (adUser == null) ? new MailboxProvisioningConstraint() : adUser.MailboxProvisioningConstraint;
            LoadBalancingReport             loadBalancingReport             = new LoadBalancingReport();
            MailboxDatabaseWithLocationInfo mailboxDatabaseWithLocationInfo = PhysicalResourceLoadBalancing.FindDatabaseAndLocation(domainController, delegate(string msg)
            {
                writeVerbose(new LocalizedString(msg));
            }, scopeSet, checkInitialProvisioningSetting, false, new int?(Server.E15MinVersion), mailboxProvisioningConstraint, excludedDatabaseIds, ref loadBalancingReport);

            if (mailboxDatabaseWithLocationInfo == null)
            {
                ExManagementApplicationLogger.LogEvent(ManagementEventLogConstants.Tuple_LoadBalancingFailedToFindDatabase, new string[]
                {
                    domainController,
                    loadBalancingReport.ToString()
                });
                writeExchangeError(new RecipientTaskException(Strings.ErrorAutomaticProvisioningFailedToFindDatabase("TargetDatabase")), ExchangeErrorCategory.ServerOperation, null);
            }
            return(mailboxDatabaseWithLocationInfo.MailboxDatabase);
        }
        public IEnumerable <DirectoryDatabase> GetCachedDatabasesForProvisioning()
        {
            List <MailboxDatabase> allCachedDatabasesForProvisioning = PhysicalResourceLoadBalancing.GetAllCachedDatabasesForProvisioning(null, new LogMessageDelegate(this.LogVerboseMessage));

            return(allCachedDatabasesForProvisioning.Select(new Func <MailboxDatabase, DirectoryDatabase>(this.DirectoryDatabaseFromDatabase)));
        }