Addressbook Policy Changes. Add Code to Create Rooms per Organization.

This commit is contained in:
omara 2012-03-04 15:12:25 -05:00
parent d01b735e6f
commit 8a99080a90
7 changed files with 157 additions and 17 deletions

View file

@ -184,11 +184,11 @@ namespace WebsitePanel.Providers.HostedSolution
}
public bool DeleteOrganization(string organizationId, string distinguishedName,
string globalAddressList, string addressList, string offlineAddressBook,
string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook,
string securityGroup)
{
return DeleteOrganizationInternal(organizationId, distinguishedName, globalAddressList,
addressList, offlineAddressBook, securityGroup);
addressList, roomsAddressList, offlineAddressBook, securityGroup);
}
public void SetOrganizationStorageLimits(string organizationDistinguishedName, int issueWarningKB, int prohibitSendKB,
@ -618,7 +618,7 @@ namespace WebsitePanel.Providers.HostedSolution
{
Organization org = item as Organization;
DeleteOrganization(org.OrganizationId, org.DistinguishedName, org.GlobalAddressList,
org.AddressList, org.OfflineAddressBook, org.SecurityGroup);
org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup);
}
else if (item is ExchangeDomain)
{
@ -738,6 +738,12 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogInfo(" Address List: {0}", alId);
UpdateAddressList(runSpace, alId, securityGroupPath);
//create RAL
string ralId = CreateRoomsAddressList(runSpace, organizationId);
transaction.RegisterNewRoomsAddressList(ralId);
ExchangeLog.LogInfo(" Rooms Address List: {0}", ralId);
UpdateRoomsAddressList(runSpace, ralId, securityGroupPath);
//create ActiveSync policy
string asId = CreateActiveSyncPolicy(runSpace, organizationId);
transaction.RegisterNewActiveSyncPolicy(asId);
@ -753,6 +759,7 @@ namespace WebsitePanel.Providers.HostedSolution
info.AddressList = alId;
info.GlobalAddressList = galId;
info.RoomsAddressList = ralId;
info.OrganizationId = organizationId;
info.Database = databaseId;
@ -904,7 +911,7 @@ namespace WebsitePanel.Providers.HostedSolution
private bool DeleteOrganizationInternal(string organizationId, string distinguishedName,
string globalAddressList, string addressList, string offlineAddressBook, string securityGroup)
string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup)
{
ExchangeLog.LogStart("DeleteOrganizationInternal");
bool ret = true;
@ -986,6 +993,18 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogError("Could not delete Address List " + addressList, ex);
}
//delete RAL (Rooms Address List)
try
{
if (!string.IsNullOrEmpty(roomsAddressList))
DeleteRoomsAddressList(runSpace, roomsAddressList);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Rooms Address List " + roomsAddressList, ex);
}
//delete GAL
try
{
@ -4730,7 +4749,7 @@ namespace WebsitePanel.Providers.HostedSolution
#endregion
#region Address Lists (GAL, AL, OAB, ABP)
#region Address Lists (GAL, AL, RAL, OAB, ABP)
private string GetAddressListDN(Runspace runSpace, string id)
{
@ -4744,7 +4763,7 @@ namespace WebsitePanel.Providers.HostedSolution
resultObjectDN = this.GetResultObjectDN(result);
ExchangeLog.DebugInfo("AL DN: {0}", new object[] { resultObjectDN });
}
ExchangeLog.LogEnd("GetAddressListDN");
ExchangeLog.LogEnd("GetAddressListDN");
return resultObjectDN;
}
@ -4824,6 +4843,99 @@ namespace WebsitePanel.Providers.HostedSolution
ExchangeLog.LogEnd("DeleteAddressList");
}
private string GetRoomsAddressListDN(Runspace runSpace, string id)
{
ExchangeLog.LogStart("GetRoomsAddressListDN");
string resultObjectDN = null;
Command cmd = new Command("Get-AddressList");
cmd.Parameters.Add("Identity", id);
Collection<PSObject> result = this.ExecuteShellCommand(runSpace, cmd);
if ((result != null) && (result.Count > 0))
{
resultObjectDN = this.GetResultObjectDN(result);
ExchangeLog.DebugInfo("RAL DN: {0}", new object[] { resultObjectDN });
}
ExchangeLog.DebugInfo("GetRommsAddressListDN, cmd = {0}", cmd.CommandText);
ExchangeLog.LogEnd("GetRoomsAddressListDN");
return resultObjectDN;
}
private string CreateRoomsAddressList(Runspace runSpace, string organizationId)
{
ExchangeLog.LogStart("CreateRoomsAddressList");
string roomsAddressListName = this.GetRoomsAddressListName(organizationId);
string roomsAddressListDN = this.GetRoomsAddressListDN(runSpace, roomsAddressListName);
if (!string.IsNullOrEmpty(roomsAddressListDN))
{
//rooms address list already exists - we will use it
ExchangeLog.LogWarning("Rooms Address List '{0}' already exists", new object[] { roomsAddressListName });
}
else
{
//try to create a new rooms address list (10 attempts)
int attempts = 0;
Command cmd = null;
Collection<PSObject> result = null;
while (true)
{
try
{
//try to create address list
cmd = new Command("New-AddressList");
cmd.Parameters.Add("Name", roomsAddressListName);
cmd.Parameters.Add("IncludedRecipients", "Resources");
cmd.Parameters.Add("ConditionalCustomAttribute1", organizationId);
result = ExecuteShellCommand(runSpace, cmd);
roomsAddressListDN = CheckResultObjectDN(result);
}
catch (Exception ex)
{
ExchangeLog.LogError(ex);
}
if (roomsAddressListDN != null)
break;
if (attempts > 9)
throw new Exception(
string.Format("Could not create Rooms Address List '{0}' cmd = '{1}'", roomsAddressListName, cmd));
attempts++;
ExchangeLog.LogWarning("Attempt #{0} to create rooms address list failed!", attempts);
// wait 1 sec
System.Threading.Thread.Sleep(1000);
}
}
ExchangeLog.LogEnd("CreateRoomsAddressList");
return roomsAddressListDN;
}
private void UpdateRoomsAddressList(Runspace runSpace, string id, string securityGroup)
{
ExchangeLog.LogStart("UpdateRoomsAddressList");
string path = AddADPrefix(id);
Command cmd = new Command("Update-AddressList");
cmd.Parameters.Add("Identity", id);
ExecuteShellCommand(runSpace, cmd);
AdjustADSecurity(path, securityGroup, false);
ExchangeLog.LogEnd("UpdateRoomsAddressList");
}
private void DeleteRoomsAddressList(Runspace runSpace, string id)
{
ExchangeLog.LogStart("DeleteRoomsAddressList");
Command cmd = new Command("Remove-AddressList");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
ExchangeLog.LogEnd("DeleteRoomsAddressList");
}
private string GetGlobalAddressListDN(Runspace runSpace, string id)
{
ExchangeLog.LogStart("GetGlobalAddressListDN");
@ -4945,7 +5057,7 @@ namespace WebsitePanel.Providers.HostedSolution
string AL = GetAddressListName(organizationId);
string GAL = GetGlobalAddressListName(organizationId);
string OAB = GetOfflineAddressBookName(organizationId);
string RL = "All Rooms";
string RL = GetRoomsAddressListName(organizationId);
Command cmd = new Command("New-AddressBookPolicy");
cmd.Parameters.Add("Name", ABP);
@ -4991,6 +5103,11 @@ namespace WebsitePanel.Providers.HostedSolution
return orgName + " Address Policy";
}
private string GetRoomsAddressListName(string orgName)
{
return orgName + " Rooms";
}
#endregion
#region Active Directory
@ -6596,6 +6713,9 @@ namespace WebsitePanel.Providers.HostedSolution
case TransactionAction.TransactionActionTypes.CreateAddressList:
DeleteAddressList(runspace, action.Id);
break;
case TransactionAction.TransactionActionTypes.CreateRoomsAddressList:
DeleteRoomsAddressList(runspace, action.Id);
break;
case TransactionAction.TransactionActionTypes.CreateOfflineAddressBook:
DeleteOfflineAddressBook(runspace, action.Id);
break;