Beispiel #1
0
        /// <summary>
        /// Gets a specific users mailbox size
        /// </summary>
        /// <param name="userGuid"></param>
        /// <returns></returns>
        public StatMailboxSizes Get_MailboxSize(Guid userGuid, bool isArchive = false)
        {
            PSCommand cmd = new PSCommand();

            cmd.AddCommand("Get-MailboxStatistics");
            cmd.AddParameter("Identity", userGuid.ToString());
            cmd.AddParameter("DomainController", Config.ServiceSettings.PrimaryDC);
            if (isArchive)
            {
                cmd.AddParameter("Archive");
            }
            _powershell.Commands = cmd;

            Collection <PSObject> psObjects = _powershell.Invoke();

            if (psObjects.Count > 0)
            {
                StatMailboxSizes returnSize = new StatMailboxSizes();
                foreach (PSObject obj in psObjects)
                {
                    returnSize.UserGuid                    = userGuid;
                    returnSize.MailboxDatabase             = obj.Members["Database"].Value.ToString();
                    returnSize.TotalItemSize               = obj.Members["TotalItemSize"].Value.ToString();
                    returnSize.TotalItemSizeInBytes        = GetExchangeBytes(returnSize.TotalItemSize);
                    returnSize.TotalDeletedItemSize        = obj.Members["TotalDeletedItemSize"].Value.ToString();
                    returnSize.TotalDeletedItemSizeInBytes = GetExchangeBytes(returnSize.TotalDeletedItemSize);

                    int itemCount = 0;
                    int.TryParse(obj.Members["ItemCount"].Value.ToString(), out itemCount);
                    returnSize.ItemCount = itemCount;

                    int deletedItemCount = 0;
                    int.TryParse(obj.Members["DeletedItemCount"].Value.ToString(), out deletedItemCount);
                    returnSize.DeletedItemCount = deletedItemCount;

                    returnSize.Retrieved = DateTime.Now;
                    break;
                }

                return(returnSize);
            }
            else
            {
                if (_powershell.Streams.Error.Count > 0)
                {
                    throw _powershell.Streams.Error[0].Exception;
                }

                if (_powershell.Streams.Warning.Count > 0)
                {
                    throw new Exception(_powershell.Streams.Warning[0].Message);
                }

                throw new Exception("No data was returned");
            }
        }
        /// <summary>
        /// Gets a specific users mailbox size
        /// </summary>
        /// <param name="userGuid"></param>
        /// <returns></returns>
        public StatMailboxSizes Get_MailboxSize(Guid userGuid, bool isArchive = false)
        {
            PSCommand cmd = new PSCommand();
            cmd.AddCommand("Get-MailboxStatistics");
            cmd.AddParameter("Identity", userGuid.ToString());
            cmd.AddParameter("DomainController", Config.ServiceSettings.PrimaryDC);
            if (isArchive)
                cmd.AddParameter("Archive");
            _powershell.Commands = cmd;

            Collection<PSObject> psObjects = _powershell.Invoke();
            if (psObjects.Count > 0)
            {
                StatMailboxSizes returnSize = new StatMailboxSizes();
                foreach (PSObject obj in psObjects)
                {
                    returnSize.UserGuid = userGuid;
                    returnSize.MailboxDatabase = obj.Members["Database"].Value.ToString();
                    returnSize.TotalItemSize = obj.Members["TotalItemSize"].Value.ToString();
                    returnSize.TotalItemSizeInBytes = GetExchangeBytes(returnSize.TotalItemSize);
                    returnSize.TotalDeletedItemSize = obj.Members["TotalDeletedItemSize"].Value.ToString();
                    returnSize.TotalDeletedItemSizeInBytes = GetExchangeBytes(returnSize.TotalDeletedItemSize);

                    int itemCount = 0;
                    int.TryParse(obj.Members["ItemCount"].Value.ToString(), out itemCount);
                    returnSize.ItemCount = itemCount;

                    int deletedItemCount = 0;
                    int.TryParse(obj.Members["DeletedItemCount"].Value.ToString(), out deletedItemCount);
                    returnSize.DeletedItemCount = deletedItemCount;

                    returnSize.Retrieved = DateTime.Now;
                    break;
                }
                
                return returnSize;
            }
            else
            {
                if (_powershell.Streams.Error.Count > 0)
                    throw _powershell.Streams.Error[0].Exception;

                if (_powershell.Streams.Warning.Count > 0)
                    throw new Exception(_powershell.Streams.Warning[0].Message);

                throw new Exception("No data was returned");
            }
        }
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                using (CloudPanelDbContext db = new CloudPanelDbContext(Config.ServiceSettings.SqlConnectionString))
                {
                    // Get a list of all users with mailboxes
                    IEnumerable <Users> mailboxes = db.Users.Where(x => x.MailboxPlan > 0);
                    IEnumerable <Users> archives  = mailboxes.Where(x => x.ArchivePlan > 0);
                    if (mailboxes != null)
                    {
                        using (ExchActions powershell = new ExchActions())
                        {
                            // Process mailbox sizes
                            foreach (Users user in mailboxes)
                            {
                                try
                                {
                                    StatMailboxSizes size = powershell.Get_MailboxSize(user.UserGuid, false);
                                    size.UserGuid          = user.UserGuid;
                                    size.UserPrincipalName = user.UserPrincipalName;

                                    db.StatMailboxSizes.InsertOnSubmit(size);
                                }
                                catch (Exception ex)
                                {
                                    CPService.LogError("Error getting mailbox size for " + user.UserPrincipalName + ": " + ex.ToString());
                                }
                            }

                            // Process archive sizes
                            foreach (Users user in archives)
                            {
                                try
                                {
                                    StatMailboxSizes size = powershell.Get_MailboxSize(user.UserGuid, true);
                                    size.UserGuid          = user.UserGuid;
                                    size.UserPrincipalName = user.UserPrincipalName;

                                    db.StatMailboxArchiveSizes.InsertOnSubmit(new StatMailboxArchiveSizes()
                                    {
                                        UserGuid                    = size.UserGuid,
                                        UserPrincipalName           = size.UserPrincipalName,
                                        MailboxDatabase             = size.MailboxDatabase,
                                        TotalItemSize               = size.TotalItemSize,
                                        TotalItemSizeInBytes        = size.TotalItemSizeInBytes,
                                        TotalDeletedItemSize        = size.TotalDeletedItemSize,
                                        TotalDeletedItemSizeInBytes = size.TotalDeletedItemSizeInBytes,
                                        ItemCount                   = size.ItemCount,
                                        DeletedItemCount            = size.DeletedItemCount,
                                        Retrieved                   = size.Retrieved
                                    });
                                }
                                catch (Exception ex)
                                {
                                    CPService.LogError("Error getting archive mailbox size for " + user.UserPrincipalName + ": " + ex.ToString());
                                }
                            }

                            // Save the database changes now
                            db.SubmitChanges();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CPService.LogError("Failed to retrieve mailbox and archive sizes: " + ex.ToString());
            }
        }