Addressbook Policy Changes. Add Code to Create Rooms per Organization.
This commit is contained in:
parent
d01b735e6f
commit
8a99080a90
7 changed files with 157 additions and 17 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue