Merge with Exchange SP2 changes

This commit is contained in:
feodor_fitsner 2012-02-20 09:30:18 -08:00
commit 39a8bd6797
3 changed files with 113 additions and 6 deletions

View file

@ -67,6 +67,7 @@ namespace WebsitePanel.Providers.HostedSolution
#region Constants #region Constants
private const string CONFIG_CLEAR_QUERYBASEDN = "WebsitePanel.Exchange.ClearQueryBaseDN"; private const string CONFIG_CLEAR_QUERYBASEDN = "WebsitePanel.Exchange.ClearQueryBaseDN";
private const string CONFIG_ENABLESP2ABP = "WebsitePanel.Exchange.enableSP2abp";
#endregion #endregion
#region Properties #region Properties
@ -754,6 +755,7 @@ namespace WebsitePanel.Providers.HostedSolution
info.GlobalAddressList = galId; info.GlobalAddressList = galId;
info.OrganizationId = organizationId; info.OrganizationId = organizationId;
info.Database = databaseId; info.Database = databaseId;
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -838,7 +840,21 @@ namespace WebsitePanel.Providers.HostedSolution
transaction.RegisterNewOfflineAddressBook(oabId); transaction.RegisterNewOfflineAddressBook(oabId);
UpdateOfflineAddressBook(runSpace, oabId, securityGroupId); UpdateOfflineAddressBook(runSpace, oabId, securityGroupId);
info.OfflineAddressBook = oabId; info.OfflineAddressBook = oabId;
}
//create ABP
bool enableSP2abp = false;
if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null)
enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]);
Version exchangeVersion = GetExchangeVersion();
if (enableSP2abp && (exchangeVersion >= new Version(14, 2)))
{
string abpId = CreateAddressPolicy(runSpace, organizationId);
transaction.RegisterNewAddressPolicy(abpId);
ExchangeLog.LogInfo(" Address Policy: {0}", abpId);
}
}
catch (Exception ex) catch (Exception ex)
{ {
ExchangeLog.LogError("CreateOrganizationOfflineAddressBookInternal", ex); ExchangeLog.LogError("CreateOrganizationOfflineAddressBookInternal", ex);
@ -851,6 +867,8 @@ namespace WebsitePanel.Providers.HostedSolution
CloseRunspace(runSpace); CloseRunspace(runSpace);
} }
ExchangeLog.LogEnd("CreateOrganizationOfflineAddressBookInternal"); ExchangeLog.LogEnd("CreateOrganizationOfflineAddressBookInternal");
return info; return info;
} }
@ -919,6 +937,30 @@ namespace WebsitePanel.Providers.HostedSolution
if (!DeleteOrganizationPublicFolders(runSpace, organizationId)) if (!DeleteOrganizationPublicFolders(runSpace, organizationId))
ret = false; ret = false;
//delete ABP
bool enableSP2abp = false;
if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null)
enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]);
Version exchangeVersion = GetExchangeVersion();
if (enableSP2abp && (exchangeVersion >= new Version(14, 2)))
{
string adpstring = GetAddressPolicyName(organizationId);
try
{
if (!string.IsNullOrEmpty(adpstring))
DeleteAddressPolicy(runSpace, adpstring);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Address Policy " + globalAddressList, ex);
}
}
//delete OAB //delete OAB
try try
@ -1748,6 +1790,7 @@ namespace WebsitePanel.Providers.HostedSolution
int attempts = 0; int attempts = 0;
string id = null; string id = null;
Version exchangeVersion = GetExchangeVersion();
try try
@ -1795,6 +1838,7 @@ namespace WebsitePanel.Providers.HostedSolution
//transaction.RegisterNewMailbox(id); //transaction.RegisterNewMailbox(id);
string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress")); string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress"));
string adpstring = GetAddressPolicyName(organizationId);
//update mailbox //update mailbox
cmd = new Command("Set-Mailbox"); cmd = new Command("Set-Mailbox");
@ -1805,6 +1849,12 @@ namespace WebsitePanel.Providers.HostedSolution
cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress);
cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("PrimarySmtpAddress", upn);
cmd.Parameters.Add("WindowsEmailAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn);
bool enableSP2abp = false;
if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null)
enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]);
if (enableSP2abp && (exchangeVersion >= new Version(14, 2)))
cmd.Parameters.Add("AddressBookPolicy", adpstring);
cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false));
cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false);
@ -1814,6 +1864,8 @@ namespace WebsitePanel.Providers.HostedSolution
cmd.Parameters.Add("RetainDeletedItemsFor", ConvertDaysToEnhancedTimeSpan(keepDeletedItemsDays)); cmd.Parameters.Add("RetainDeletedItemsFor", ConvertDaysToEnhancedTimeSpan(keepDeletedItemsDays));
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
//update AD object //update AD object
string globalAddressListName = this.GetGlobalAddressListName(organizationId); string globalAddressListName = this.GetGlobalAddressListName(organizationId);
string globalAddressListDN = this.GetGlobalAddressListDN(runSpace, globalAddressListName); string globalAddressListDN = this.GetGlobalAddressListDN(runSpace, globalAddressListName);
@ -1824,7 +1876,6 @@ namespace WebsitePanel.Providers.HostedSolution
bool clearQueryBaseDN = false; bool clearQueryBaseDN = false;
if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null) if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null)
clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]); clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]);
Version exchangeVersion = GetExchangeVersion();
if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1)))) if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1))))
SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN); SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN);
@ -1885,6 +1936,8 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeTransaction transaction = StartTransaction(); ExchangeTransaction transaction = StartTransaction();
Runspace runSpace = null; Runspace runSpace = null;
Version exchangeVersion = GetExchangeVersion();
try try
{ {
runSpace = OpenRunspace(); runSpace = OpenRunspace();
@ -1916,6 +1969,7 @@ namespace WebsitePanel.Providers.HostedSolution
transaction.RegisterNewMailbox(id); transaction.RegisterNewMailbox(id);
string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress")); string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress"));
string adpstring = GetAddressPolicyName(organizationId);
//update mailbox //update mailbox
cmd = new Command("Set-Mailbox"); cmd = new Command("Set-Mailbox");
@ -1926,6 +1980,12 @@ namespace WebsitePanel.Providers.HostedSolution
cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress);
cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("PrimarySmtpAddress", upn);
cmd.Parameters.Add("WindowsEmailAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn);
bool enableSP2abp = false;
if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null)
enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]);
if (enableSP2abp && (exchangeVersion >= new Version(14, 2)))
cmd.Parameters.Add("AddressBookPolicy", adpstring);
cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false));
cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false);
@ -1944,7 +2004,6 @@ namespace WebsitePanel.Providers.HostedSolution
bool clearQueryBaseDN = false; bool clearQueryBaseDN = false;
if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null) if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null)
clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]); clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]);
Version exchangeVersion = GetExchangeVersion();
if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1)))) if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1))))
SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN); SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN);
@ -4671,7 +4730,7 @@ namespace WebsitePanel.Providers.HostedSolution
#endregion #endregion
#region Address Lists (GAL, AL, OAB) #region Address Lists (GAL, AL, OAB, ABP)
private string GetAddressListDN(Runspace runSpace, string id) private string GetAddressListDN(Runspace runSpace, string id)
{ {
@ -4755,7 +4814,6 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("UpdateAddressList"); ExchangeLog.LogEnd("UpdateAddressList");
} }
private void DeleteAddressList(Runspace runSpace, string id) private void DeleteAddressList(Runspace runSpace, string id)
{ {
ExchangeLog.LogStart("DeleteAddressList"); ExchangeLog.LogStart("DeleteAddressList");
@ -4814,7 +4872,6 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("UpdateGlobalAddressList"); ExchangeLog.LogEnd("UpdateGlobalAddressList");
} }
private void DeleteGlobalAddressList(Runspace runSpace, string id) private void DeleteGlobalAddressList(Runspace runSpace, string id)
{ {
ExchangeLog.LogStart("DeleteGlobalAddressList"); ExchangeLog.LogStart("DeleteGlobalAddressList");
@ -4880,6 +4937,41 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("DeleteOfflineAddressBook"); ExchangeLog.LogEnd("DeleteOfflineAddressBook");
} }
private string CreateAddressPolicy(Runspace runSpace, string organizationId)
{
ExchangeLog.LogStart("CreateAddressPolicy");
string ABP = GetAddressPolicyName(organizationId);
string AL = GetAddressListName(organizationId);
string GAL = GetGlobalAddressListName(organizationId);
string OAB = GetOfflineAddressBookName(organizationId);
string RL = "All Rooms";
Command cmd = new Command("New-AddressBookPolicy");
cmd.Parameters.Add("Name", ABP);
cmd.Parameters.Add("GlobalAddressList", GAL);
cmd.Parameters.Add("OfflineAddressBook", OAB);
cmd.Parameters.Add("AddressLists", AL);
cmd.Parameters.Add("RoomList", RL);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
string id = GetResultObjectDN(result);
ExchangeLog.LogEnd("CreateAddressPolicy");
return id;
}
private void DeleteAddressPolicy(Runspace runSpace, string id)
{
ExchangeLog.LogStart("DeleteAddressPolicy");
Command cmd = new Command("Remove-AddressBookPolicy");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
ExchangeLog.LogEnd("DeleteAddressPolicy");
}
private string GetAddressListName(string orgName) private string GetAddressListName(string orgName)
{ {
return orgName + " Address List"; return orgName + " Address List";
@ -4894,6 +4986,10 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
return orgName + " Offline Address Book"; return orgName + " Offline Address Book";
} }
private string GetAddressPolicyName(string orgName)
{
return orgName + " Address Policy";
}
#endregion #endregion

View file

@ -84,6 +84,14 @@ namespace WebsitePanel.Providers.HostedSolution
action.Id = id; action.Id = id;
Actions.Add(action); Actions.Add(action);
} }
internal void RegisterNewAddressPolicy(string id)
{
TransactionAction action = new TransactionAction();
action.ActionType = TransactionAction.TransactionActionTypes.CreateAddressPolicy;
action.Id = id;
Actions.Add(action);
}
internal void RegisterNewOfflineAddressBook(string id) internal void RegisterNewOfflineAddressBook(string id)
{ {
@ -220,6 +228,7 @@ namespace WebsitePanel.Providers.HostedSolution
CreateOrganizationUnit, CreateOrganizationUnit,
CreateGlobalAddressList, CreateGlobalAddressList,
CreateAddressList, CreateAddressList,
CreateAddressPolicy,
CreateOfflineAddressBook, CreateOfflineAddressBook,
CreateDistributionGroup, CreateDistributionGroup,
EnableDistributionGroup, EnableDistributionGroup,

View file

@ -8,6 +8,8 @@
</configSections> </configSections>
<appSettings> <appSettings>
<add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false"/> <add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false"/>
<add key="WebsitePanel.Exchange.ClearQueryBaseDN" value="false" />
<add key="WebsitePanel.Exchange.enableSP2abp" value="false" />
<add key="SCVMMServerName" value=""/> <add key="SCVMMServerName" value=""/>
<add key="SCVMMServerPort" value=""/> <add key="SCVMMServerPort" value=""/>
</appSettings> </appSettings>