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