diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeMailbox.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeMailbox.cs index e8bbee84..69c8bb69 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeMailbox.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/ExchangeMailbox.cs @@ -98,6 +98,10 @@ namespace WebsitePanel.Providers.HostedSolution DateTime lastLogon; DateTime lastLogoff; + bool enableLitigationHold; + long recoverabelItemsSpace; + long recoverabelItemsWarning; + public string DisplayName @@ -399,5 +403,26 @@ namespace WebsitePanel.Providers.HostedSolution get { return fullAccessAccounts; } set { fullAccessAccounts = value; } } + + + public bool EnableLitigationHold + { + get { return enableLitigationHold; } + set { enableLitigationHold = value; } + } + + + public long RecoverabelItemsSpace + { + get { return this.recoverabelItemsSpace; } + set { this.recoverabelItemsSpace = value; } + } + + public long RecoverabelItemsWarning + { + get { return this.recoverabelItemsWarning; } + set { this.recoverabelItemsWarning = value; } + } + } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs index 3bf7862f..a84b9d18 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs @@ -1934,6 +1934,14 @@ namespace WebsitePanel.Providers.HostedSolution else cmd.Parameters.Add("HiddenFromAddressListsEnabled", hideFromAddressBook); cmd.Parameters.Add("AddressBookPolicy", addressBookPolicy); + + if (enabledLitigationHold) + { + cmd.Parameters.Add("LitigationHoldEnabled", true); + cmd.Parameters.Add("RecoverableItemsQuota", ConvertKBToUnlimited(recoverabelItemsSpace)); + cmd.Parameters.Add("RecoverableItemsWarningQuota", ConvertKBToUnlimited(recoverabelItemsWarning)); + } + ExecuteShellCommand(runSpace, cmd); //Client Access @@ -2276,6 +2284,8 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Identity", accountName); cmd.Parameters.Add("HiddenFromAddressListsEnabled", hideFromAddressBook); cmd.Parameters.Add("CustomAttribute2", (disabled ? "disabled" : null)); + + ExecuteShellCommand(runSpace, cmd); } @@ -2420,6 +2430,13 @@ namespace WebsitePanel.Providers.HostedSolution info.KeepDeletedItemsDays = ConvertEnhancedTimeSpanToDays((EnhancedTimeSpan)GetPSObjectProperty(mailbox, "RetainDeletedItemsFor")); + info.EnableLitigationHold = (bool)GetPSObjectProperty(mailbox, "LitigationHoldEnabled"); + + info.RecoverabelItemsSpace = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "RecoverableItemsQuota")); + info.RecoverabelItemsWarning = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "RecoverableItemsWarningQuota")); + //Client Access Command cmd = new Command("Get-CASMailbox"); cmd.Parameters.Add("Identity", accountName); @@ -2492,6 +2509,14 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("RecipientLimits", ConvertInt32ToUnlimited(maxRecipients)); cmd.Parameters.Add("MaxSendSize", ConvertKBToUnlimited(maxSendMessageSizeKB)); cmd.Parameters.Add("MaxReceiveSize", ConvertKBToUnlimited(maxReceiveMessageSizeKB)); + + if (enabledLitigationHold) + { + cmd.Parameters.Add("LitigationHoldEnabled", true); + cmd.Parameters.Add("RecoverableItemsQuota", ConvertKBToUnlimited(recoverabelItemsSpace)); + cmd.Parameters.Add("RecoverableItemsWarningQuota", ConvertKBToUnlimited(recoverabelItemsWarning)); + } + ExecuteShellCommand(runSpace, cmd); //Client Access diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index 163fb11d..0080af13 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -2339,7 +2339,7 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("SetMailboxMailFlowSettingsInternal"); } - private ExchangeMailbox GetMailboxAdvancedSettingsInternal(string accountName) + internal virtual ExchangeMailbox GetMailboxAdvancedSettingsInternal(string accountName) { ExchangeLog.LogStart("GetMailboxAdvancedSettingsInternal"); ExchangeLog.DebugInfo("Account: {0}", accountName); @@ -2412,7 +2412,7 @@ namespace WebsitePanel.Providers.HostedSolution return info; } - private void SetMailboxAdvancedSettingsInternal(string organizationId, string accountName, bool enablePOP, bool enableIMAP, + internal virtual void SetMailboxAdvancedSettingsInternal(string organizationId, string accountName, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync, long issueWarningKB, long prohibitSendKB, long prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool enabledLitigationHold, long recoverabelItemsSpace, long recoverabelItemsWarning) @@ -2435,6 +2435,7 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("RecipientLimits", ConvertInt32ToUnlimited(maxRecipients)); cmd.Parameters.Add("MaxSendSize", ConvertKBToUnlimited(maxSendMessageSizeKB)); cmd.Parameters.Add("MaxReceiveSize", ConvertKBToUnlimited(maxReceiveMessageSizeKB)); + ExecuteShellCommand(runSpace, cmd); //Client Access @@ -2866,7 +2867,7 @@ namespace WebsitePanel.Providers.HostedSolution return info; } - private Collection GetMailboxObject(Runspace runSpace, string id) + virtual internal Collection GetMailboxObject(Runspace runSpace, string id) { Command cmd = new Command("Get-Mailbox"); cmd.Parameters.Add("Identity", id); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010.cs index bf1b6ab9..65565207 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010.cs @@ -77,6 +77,144 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("SetCalendarSettings"); } + + internal override ExchangeMailbox GetMailboxAdvancedSettingsInternal(string accountName) + { + ExchangeLog.LogStart("GetMailboxAdvancedSettingsInternal"); + ExchangeLog.DebugInfo("Account: {0}", accountName); + + ExchangeMailbox info = new ExchangeMailbox(); + info.AccountName = accountName; + Runspace runSpace = null; + try + { + runSpace = OpenRunspace(); + + Collection result = GetMailboxObject(runSpace, accountName); + PSObject mailbox = result[0]; + + info.IssueWarningKB = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "IssueWarningQuota")); + info.ProhibitSendKB = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "ProhibitSendQuota")); + info.ProhibitSendReceiveKB = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "ProhibitSendReceiveQuota")); + info.KeepDeletedItemsDays = + ConvertEnhancedTimeSpanToDays((EnhancedTimeSpan)GetPSObjectProperty(mailbox, "RetainDeletedItemsFor")); + + info.EnableLitigationHold = (bool)GetPSObjectProperty(mailbox, "LitigationHoldEnabled"); + + info.RecoverabelItemsSpace = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "RecoverableItemsQuota")); + info.RecoverabelItemsWarning = + ConvertUnlimitedToKB((Unlimited)GetPSObjectProperty(mailbox, "RecoverableItemsWarningQuota")); + + + //Client Access + Command cmd = new Command("Get-CASMailbox"); + cmd.Parameters.Add("Identity", accountName); + result = ExecuteShellCommand(runSpace, cmd); + mailbox = result[0]; + + info.EnableActiveSync = (bool)GetPSObjectProperty(mailbox, "ActiveSyncEnabled"); + info.EnableOWA = (bool)GetPSObjectProperty(mailbox, "OWAEnabled"); + info.EnableMAPI = (bool)GetPSObjectProperty(mailbox, "MAPIEnabled"); + info.EnablePOP = (bool)GetPSObjectProperty(mailbox, "PopEnabled"); + info.EnableIMAP = (bool)GetPSObjectProperty(mailbox, "ImapEnabled"); + + //Statistics + cmd = new Command("Get-MailboxStatistics"); + cmd.Parameters.Add("Identity", accountName); + result = ExecuteShellCommand(runSpace, cmd); + if (result.Count > 0) + { + PSObject statistics = result[0]; + Unlimited totalItemSize = + (Unlimited)GetPSObjectProperty(statistics, "TotalItemSize"); + info.TotalSizeMB = ConvertUnlimitedToMB(totalItemSize); + uint? itemCount = (uint?)GetPSObjectProperty(statistics, "ItemCount"); + info.TotalItems = ConvertNullableToInt32(itemCount); + DateTime? lastLogoffTime = (DateTime?)GetPSObjectProperty(statistics, "LastLogoffTime"); ; + DateTime? lastLogonTime = (DateTime?)GetPSObjectProperty(statistics, "LastLogonTime"); ; + info.LastLogoff = ConvertNullableToDateTime(lastLogoffTime); + info.LastLogon = ConvertNullableToDateTime(lastLogonTime); + } + else + { + info.TotalSizeMB = 0; + info.TotalItems = 0; + info.LastLogoff = DateTime.MinValue; + info.LastLogon = DateTime.MinValue; + } + + //domain + info.Domain = GetNETBIOSDomainName(); + } + finally + { + + CloseRunspace(runSpace); + } + ExchangeLog.LogEnd("GetMailboxAdvancedSettingsInternal"); + return info; + } + + + + internal override void SetMailboxAdvancedSettingsInternal(string organizationId, string accountName, bool enablePOP, bool enableIMAP, + bool enableOWA, bool enableMAPI, bool enableActiveSync, long issueWarningKB, long prohibitSendKB, + long prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, + int maxReceiveMessageSizeKB, bool enabledLitigationHold, long recoverabelItemsSpace, long recoverabelItemsWarning) + { + ExchangeLog.LogStart("SetMailboxAdvancedSettingsInternal"); + ExchangeLog.DebugInfo("Account: {0}", accountName); + + Runspace runSpace = null; + try + { + runSpace = OpenRunspace(); + + + Command cmd = new Command("Set-Mailbox"); + cmd.Parameters.Add("Identity", accountName); + cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB)); + cmd.Parameters.Add("ProhibitSendQuota", ConvertKBToUnlimited(prohibitSendKB)); + cmd.Parameters.Add("ProhibitSendReceiveQuota", ConvertKBToUnlimited(prohibitSendReceiveKB)); + cmd.Parameters.Add("RetainDeletedItemsFor", ConvertDaysToEnhancedTimeSpan(keepDeletedItemsDays)); + cmd.Parameters.Add("RecipientLimits", ConvertInt32ToUnlimited(maxRecipients)); + cmd.Parameters.Add("MaxSendSize", ConvertKBToUnlimited(maxSendMessageSizeKB)); + cmd.Parameters.Add("MaxReceiveSize", ConvertKBToUnlimited(maxReceiveMessageSizeKB)); + + cmd.Parameters.Add("LitigationHoldEnabled", enabledLitigationHold); + cmd.Parameters.Add("RecoverableItemsQuota", ConvertKBToUnlimited(recoverabelItemsSpace)); + cmd.Parameters.Add("RecoverableItemsWarningQuota", ConvertKBToUnlimited(recoverabelItemsWarning)); + + ExecuteShellCommand(runSpace, cmd); + + //Client Access + cmd = new Command("Set-CASMailbox"); + cmd.Parameters.Add("Identity", accountName); + cmd.Parameters.Add("ActiveSyncEnabled", enableActiveSync); + if (enableActiveSync) + { + cmd.Parameters.Add("ActiveSyncMailboxPolicy", organizationId); + } + cmd.Parameters.Add("OWAEnabled", enableOWA); + cmd.Parameters.Add("MAPIEnabled", enableMAPI); + cmd.Parameters.Add("PopEnabled", enablePOP); + cmd.Parameters.Add("ImapEnabled", enableIMAP); + ExecuteShellCommand(runSpace, cmd); + } + finally + { + + CloseRunspace(runSpace); + } + ExchangeLog.LogEnd("SetMailboxAdvancedSettingsInternal"); + } + + + #endregion #region Distribution Lists diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs index 984f4138..e6a5f908 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2010SP2.cs @@ -414,6 +414,14 @@ namespace WebsitePanel.Providers.HostedSolution else cmd.Parameters.Add("HiddenFromAddressListsEnabled", hideFromAddressBook); cmd.Parameters.Add("AddressBookPolicy", addressBookPolicy); + + if (enabledLitigationHold) + { + cmd.Parameters.Add("LitigationHoldEnabled", true); + cmd.Parameters.Add("RecoverableItemsQuota", ConvertKBToUnlimited(recoverabelItemsSpace)); + cmd.Parameters.Add("RecoverableItemsWarningQuota", ConvertKBToUnlimited(recoverabelItemsWarning)); + } + ExecuteShellCommand(runSpace, cmd); //Client Access