PoshCode Logo PowerShell Code Repository

ASPX Mailbox (4 of 6) (modification of post by view diff)
embed code: <script type="text/javascript" src="http://PoshCode.org/embed/508"></script>download | new post

This is part 4 of a 6 part mailbox creation web site.
This site allows local administrators to create and delete mailboxes, and change email addresses. Save this as MailboxConfirm.aspx.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Management.Automation;
  5. using System.Management.Automation.Runspaces;
  6. using System.Net.Mail;
  7. using System.Text.RegularExpressions;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10.  
  11. public partial class MailboxConfirm : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.         if (IsPostBack)
  16.         {
  17.             if (Session["AdminUser"].ToString() == "")
  18.             {
  19.                 Server.Transfer("MailboxTasks.aspx",false);
  20.             }
  21.             else
  22.             {
  23.                 Session["blKeepAddress"] = chkKeepAddress.Checked;
  24.                 Session["NewAddress"] = newAddress.Text;
  25.                 Server.Transfer("MailboxTaskResults.aspx", true);
  26.             }
  27.         }
  28. //Variable Definition
  29.         Collection<PSObject> Results;
  30.         string strNTUser = Request.ServerVariables["LOGON_USER"];
  31.         string strUCNTUser = strNTUser.ToUpper();
  32.         string strUserToCheck = strUCNTUser;
  33.         string strUserName = "";
  34.         string strTargName = "";
  35.         string strTargPath = "";
  36.         string strTask = "";
  37.         Session["AdminID"] = "";
  38.         Session["DirPath"] = "";
  39.         Session["OldAddress"] = "";
  40.         Session["NewAddress"] = "";
  41.         Session["AdminUser"] = "";
  42.         Session["LastName"] = "";
  43.         Session["Agency"] = "";
  44.         Session["DivisionOU"] = "";
  45.         Session["blKeepAddress"] = false;
  46.         newAddress.Visible = false;
  47.         chkKeepAddress.Visible = false;
  48.         chkKeepAddress.Text = "Keep old email addresses";
  49.         strTargName = "'" + Request.Form[3] + "'";
  50.         strTask = Request.Form[4];
  51.         Session["Action"] = strTask;
  52.         if (strUCNTUser.IndexOf("\\", 0) > 0)
  53.         {
  54.             strUserToCheck = strUCNTUser.Substring(strUCNTUser.IndexOf("\\",0)+1);
  55.         }
  56.         strNTUser = strUserToCheck.ToLower();
  57.  
  58.         Results = runposh("dsquery user -samid " + strNTUser);
  59.         if (Results != null)
  60.         {
  61.             strUserName = Results[0].ToString();
  62.         }
  63.         Results = runposh("dsquery user -samid " + strTargName);
  64.         if (Results != null)
  65.         {
  66.             if (Results.Count != 0)
  67.             {
  68.                 Response.Write("Your logon ID and password are correct<br /><br />");
  69.                 strTargPath = Results[0].ToString();
  70.                 fnGetData(strTargPath, strUserName, strUserToCheck, strNTUser, strTask, strTargName);
  71.             }
  72.             else
  73.             {
  74.                 Response.Write("We were unable to locate the object you specified (" + strTargName + "). Please check the name and try again<br /><br />");
  75.                 fnAddBackButton();
  76.             }
  77.         }
  78.     }
  79.     void fnGetData(string strTargPath, string strUserName, string strUserToCheck, string strNTUser, string strTask, string strTargName)
  80.     {
  81.         string strPoshCommand = "";
  82.         string strAgencyOU = "";
  83.         string strDivOU = "";
  84.         string strMBXGroup = "";
  85.         string strUPN = "";
  86.         int intAttaySize = 0;
  87.  
  88.         Boolean boolIsMemberOfAdminGroup = false;
  89.         Boolean boolIsValidCompany = false;
  90.  
  91.         Collection<PSObject> Results;
  92.  
  93.         #region Find Admin Group
  94.         strPoshCommand = strTargPath + ".split(',').length";
  95.         Results = runposh(strPoshCommand);
  96.         intAttaySize = int.Parse(Results[0].ToString());
  97.         strPoshCommand = "";
  98.         for (int i = intAttaySize; i > 0; i--)
  99.         {
  100.             strPoshCommand = strPoshCommand + "$part" + i + ",";
  101.         }
  102.         strPoshCommand = strPoshCommand.Substring(0, strPoshCommand.Length - 1) + " = " + strTargPath + ".split(',')";
  103.         Results = runposh(strPoshCommand);
  104.         strPoshCommand = "dsget user " + strTargPath + " -company"; //This is the agency
  105.         Results = runposh(strPoshCommand);
  106.         if (Results[1].ToString().Trim().Length >= 3)
  107.         {
  108.             boolIsValidCompany = true;
  109.             strAgencyOU = Results[1].ToString().Trim().Substring(0, 3).ToUpper();
  110.             strMBXGroup = strAgencyOU + "MailboxAdmins";
  111.         }
  112.         else
  113.         {
  114.                 Response.Write("User " + strTargName + "'s Active Directory account does not seem to have an agency name in the Company field.<br>We will not be able to create a mailbox until this is corrected.<br>");
  115.             boolIsValidCompany = false;
  116.                 strAgencyOU = "";
  117.         }
  118.         #endregion
  119.         #region Validate Admin Group
  120.         if (boolIsValidCompany == true)
  121.         {
  122.             //Check to see if user is in the admin group
  123.             strPoshCommand = "dsget user " + strUserName + " -memberof -expand";
  124.             Results = runposh(strPoshCommand);
  125.             for (int i = 0; i < Results.Count - 1; i++)
  126.             {
  127.                 Array groupcheck = Results[i].ToString().Split(',');
  128.                 string strgroupstring = groupcheck.GetValue(0).ToString();
  129.                 strgroupstring = strgroupstring.Substring(4);
  130.  
  131.                 if (strgroupstring.ToUpper() == strMBXGroup.ToUpper())
  132.                 {
  133.                     boolIsMemberOfAdminGroup = true;
  134.                     break;
  135.                 }
  136.             if ((strgroupstring.ToLower() == "exchfulladmins") || (strgroupstring.ToLower() == "exch2k7servicedesk"))
  137.                 {
  138.                     boolIsMemberOfAdminGroup = true;
  139.                     break;
  140.                 }
  141.             }
  142.         }
  143.         #endregion
  144.         #region Results of Admin Group Checks
  145.         if (boolIsValidCompany == true)
  146.         {
  147.             if (boolIsMemberOfAdminGroup == false)
  148.             {
  149.                 Response.Write("User " + strUserToCheck.ToLower() + " is not a member of " + strMBXGroup + ". You will not be able to modify objects.<br><br>");
  150.             }
  151.             else
  152.             {
  153.                 if (strMBXGroup.Length > 0)
  154.                 {
  155.                     Response.Write("User " + strUserToCheck.ToLower() + " is a member of " + strMBXGroup + ".<br><br>");
  156.                 }
  157.                 Results = runposh("Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin");
  158.                 Results = runposh("get-user " + strNTUser + " |fl -property userprincipalname |out-string");
  159.                 strUPN = Results[0].ToString().Replace("UserPrincipalName :", "").Trim();
  160.                 switch (strTask.ToLower())
  161.                 {
  162.                     case "create mailbox":
  163.                         fnCreateMailboxChecks(strTargPath, strUserName, strUserToCheck.ToLower(), strTargName, strAgencyOU);
  164.                         break;
  165.                     case "delete mailbox":
  166.                         fnDeleteMailboxChecks(strTargPath, strUPN, strUserToCheck.ToLower());
  167.                         break;
  168.                     case "change address":
  169.                         fnChangeAddressChecks(strTargPath, strUserToCheck.ToLower());
  170.                         break;
  171.                 }
  172.             }
  173.         }
  174.         #endregion
  175.     }
  176.     void fnCreateMailboxChecks(string strUserPath, string strAdminUser, string strAdminName, string strTargName, string strAgencyOU)
  177.     {
  178.         Collection<PSObject> Results;
  179.         string strCompany = strAgencyOU;
  180.         string strLastName = "";
  181.         string strExchangeServer = "";
  182.  
  183.         Response.Write("Requested action is Create Mailbox");
  184.         Response.Write("<table border>");
  185.         Response.Write("<tr><th>Attribute</th><th>Value</th><th>Expected State</th></tr>");
  186.         Results = runposh("dsget user " + strUserPath + " -samid");
  187.         Response.Write("<tr><td>Logon ID</td><td><b>" + Results[1].ToString() + "</b></td><td>Populated</td></tr>");
  188.         Results = runposh("dsget user " + strUserPath + " -display");
  189.         Response.Write("<tr><td>Name</td><td><b>" + Results[1].ToString() + "</b></td><td>Populated</td></tr>");
  190.         Response.Write("<tr><td>Directory Path</td><td><b>" + strUserPath + "</b></td><td>Populated</td></tr>");
  191.         Results = runposh("dsget user " + strUserPath + " -ln");
  192.         strLastName = Results[1].ToString();
  193.         Response.Write("<tr><td>Last Name</td><td><b>" + strLastName + "</b></td><td>Populated</td></tr>");
  194.         Results = runposh("dsget user " + strUserPath + " -company");
  195.         strCompany = Results[1].ToString();
  196.         Results = runposh("dsget user " + strUserPath + " -upn");
  197.         Response.Write("<tr><td>Agency</td><td><b>" + strCompany + "</b></td><td>Populated</td></tr>");
  198.         Results = runposh("get-mailbox -identity " + strUserPath + " |fl servername |out-string");
  199.         if (Results[0].ToString() != "")
  200.         {
  201.             strExchangeServer = Results[0].ToString().TrimEnd(Convert.ToChar(32)).TrimStart(Convert.ToChar(32));
  202.             strExchangeServer = strExchangeServer.Substring(17);
  203.             Response.Write("<tr><td>Exchange Server</td><td><b>" + strExchangeServer + "</b></td><td>Empty</td></tr></table>");
  204.         }
  205.         else
  206.         {
  207.             Response.Write("<tr><td>Exchange Server</td><td><b></b></td><td>Empty</td></tr></table>");
  208.         }
  209.         if ((strCompany.Replace(" ","") == "") || (strLastName.Replace(" ","") == "") || ((strExchangeServer.Replace(" ","") != "")))
  210.         {
  211.             Response.Write("<span style='color:Red'>One or more required fields is in an incorrect state. Please check the values listed above and try again.</span>");
  212.             fnAddBackButton();
  213.         }
  214.         else
  215.         {
  216.             Session["AdminID"] = strAdminUser;
  217.             Session["AdminUser"] = strAdminName;
  218.             Session["LastName"] = strLastName;
  219.             Session["DirPath"] = strUserPath;
  220.             Session["Agency"] = strCompany;
  221.             Button btnCreate = new Button();
  222.             btnCreate.Attributes.Add("onclick", "this.value='Please wait...';this.disabled= true;" + ClientScript.GetPostBackEventReference(new PostBackOptions(this, "btnCreate")));
  223.             btnCreate.Text = "Create Mailbox";
  224.             frmMailboxConfirm.Controls.Add(btnCreate);
  225.         }
  226.     }
  227.     void fnDeleteMailboxChecks(string strTargPath, string strAdminUser, string strAdminName)
  228.     {
  229.         Collection<PSObject> colDeleteResults;
  230.  
  231.         string strExchangeServer;
  232.  
  233.         Session["AdminID"] = strAdminUser;
  234.         Session["AdminUser"] = strAdminName;
  235.         Session["DirPath"] = strTargPath;
  236.  
  237.         Response.Write("Requested action is DELETE Mailbox<br>");
  238.         Response.Write("<table border>");
  239.         Response.Write("<tr><th>Attribute</th><th>Value</th><th>Expected State</th></tr>");
  240.         colDeleteResults = runposh("dsget user " + strTargPath + " -samid");
  241.         Response.Write("<tr><td>Logon ID</td><td><b>" + colDeleteResults[1].ToString() + "</b></td><td>Populated</td></tr>");
  242.         colDeleteResults = runposh("dsget user " + strTargPath + " -display");
  243.         Response.Write("<tr><td>Name</td><td><b>" + colDeleteResults[1].ToString() +  "</b></td><td>Populated</td></tr>");
  244.         Response.Write("<tr><td>Directory Path</td><td><b>" + strTargPath + "</b></td><td>Populated</td></tr>");
  245.         colDeleteResults = runposh("get-mailbox -identity " + strTargPath + " |fl servername |out-string");
  246.         if (colDeleteResults[0].ToString() != "")
  247.         {
  248.             strExchangeServer = colDeleteResults[0].ToString().TrimEnd(Convert.ToChar(32)).TrimStart(Convert.ToChar(32));
  249.             strExchangeServer = strExchangeServer.Substring(17);
  250.  
  251.             Response.Write("<tr><td>Exchange Server</td><td><b>" + strExchangeServer + "</b></td><td>Populated</td></tr></table>");
  252.             Button btnDelete = new Button();
  253.             btnDelete.Attributes.Add("onclick", "this.value='Please wait...';this.disabled= true;" + ClientScript.GetPostBackEventReference(new PostBackOptions(this, "btnDelete")));
  254.             btnDelete.Text = "!DELETE Mailbox!";
  255.             frmMailboxConfirm.Controls.Add(btnDelete);
  256.         }
  257.         else
  258.         {
  259.             Response.Write("<tr><td>Exchange Server</td><td><b></b></td><td>Populated</td></tr></table>");
  260.             Response.Write("<br /><span style='color:Red'>One or more required fields is in an incorrect state. Please check the values listed above and try again.</span>");
  261.             fnAddBackButton();
  262.         }
  263.     }
  264.     void fnChangeAddressChecks(string strTargetPath, string strAdminName)
  265.     {
  266.         Collection<PSObject> colChangeResults;
  267.  
  268.         string strCompany = "";
  269.         string strLastName = "";
  270.         string strEmailAddress = "";
  271.         Session["DirPath"] = strTargetPath;
  272.  
  273.         Response.Write("Requested action is Change Address");
  274.         Response.Write("<table border>");
  275.         Response.Write("<tr><th>Attribute</th><th>Value</th><th>Expected State</th></tr>");
  276.         colChangeResults = runposh("dsget user " + strTargetPath + " -samid");
  277.         Response.Write("<tr><td>Logon ID</td><td><b>" + colChangeResults[1].ToString() + "</b></td><td>Populated</td></tr>");
  278.         colChangeResults = runposh("dsget user " + strTargetPath + " -display");
  279.         Response.Write("<tr><td>Name</td><td><b>" + colChangeResults[1].ToString() + "</b></td><td>Populated</td></tr>");
  280.         Response.Write("<tr><td>Directory Path</td><td><b>" + strTargetPath + "</b></td><td>Populated</td></tr>");
  281.         colChangeResults = runposh("get-mailbox -identity " + strTargetPath + " |select PrimarySmtpAddress");
  282.         if (colChangeResults.Count != 0)
  283.         {
  284.             strEmailAddress = colChangeResults[0].ToString();
  285.             strEmailAddress = strEmailAddress.Substring(20);
  286.             strEmailAddress = strEmailAddress.Substring(1, strEmailAddress.Length - 2);
  287.             Session["AdminUser"] = strAdminName;
  288.             Response.Write("<tr><td>Current Adress</td><td><b>" + strEmailAddress + "</b></td><td>Populated</td></tr></table>");
  289.         }
  290.         else
  291.         {
  292.             Response.Write("<tr><td>Current Adress</td><td><b></b></td><td>Populated</td></tr></table>");
  293.         }
  294.  
  295.         Label lblNewAddress = new Label();
  296.         lblNewAddress.Text = "New Address: ";
  297.         lblNewAddress.Style["Position"] = "Absolute";
  298.         lblNewAddress.Style["Top"] = "290px";
  299.         lblNewAddress.Style["Left"]= "10px";
  300.         frmMailboxConfirm.Controls.Add(lblNewAddress);
  301.         newAddress.Style["Position"] = "Absolute";
  302.         newAddress.Style["Top"] = "290px";
  303.         newAddress.Style["Left"] = "100px";
  304.         newAddress.Visible = true;
  305.         Label lblDomain = new Label();
  306.         lblDomain.Text = "@domain.com";
  307.         lblDomain.Style["Position"] = "Absolute";
  308.         lblDomain.Style["Top"] = "290px";
  309.         lblDomain.Style["Left"] = "270px";
  310.         frmMailboxConfirm.Controls.Add(lblDomain);
  311.         chkKeepAddress.Style["Position"] = "Absolute";
  312.         chkKeepAddress.Style["Top"] = "290px";
  313.         chkKeepAddress.Style["Left"] = "385px";
  314.         chkKeepAddress.Visible = true;
  315.         colChangeResults = runposh("dsget user " + strTargetPath + " -company");
  316.         strCompany = colChangeResults[1].ToString();
  317.         colChangeResults = runposh("dsget user " + strTargetPath + " -ln");
  318.         strLastName = colChangeResults[1].ToString();
  319.  
  320.         if ((strCompany.Replace(" ", "") == "") || (strLastName.Replace(" ", "") == "") || ((strEmailAddress == "")))
  321.         {
  322.             Response.Write("<span style='color:Red'>One or more required fields is in an incorrect state. Please check the values listed above and try again.</span>");
  323.             newAddress.Visible = false;
  324.             lblNewAddress.Visible = false;
  325.             lblDomain.Visible = false;
  326.             fnAddBackButton();
  327.         }
  328.         else
  329.         {
  330.             Session["AdminUser"] = strAdminName;
  331.             Session["LastName"] = strLastName;
  332.             Session["Agency"] = strCompany;
  333.             Session["OldAddress"] = strEmailAddress;
  334.             Session["Action"] = "Change Address";
  335.             Session["AdminID"] = strAdminName;
  336.             Button btnChange = new Button();
  337.             btnChange.Attributes.Add("onclick", "this.value='Please wait...';this.disabled= true;" + ClientScript.GetPostBackEventReference(new PostBackOptions(this, "btnChange")));
  338.             btnChange.Text = "Change Address";
  339.             btnChange.Style["Position"] = "Absolute";
  340.             btnChange.Style["Top"] = "325px";
  341.             btnChange.Style["Left"] = "10px";
  342.             frmMailboxConfirm.Controls.Add(btnChange);
  343.         }
  344.     }
  345.     void fnAddBackButton()
  346.     {
  347.         Session["AdminUser"] = "";
  348.         Button btnBack = new Button();
  349.         btnBack.Attributes.Add("onclick", "this.value='Please wait...';this.disabled= true;" + ClientScript.GetPostBackEventReference(new PostBackOptions(this, "btnBack")));
  350.         btnBack.Text = "Return";
  351.         frmMailboxConfirm.Controls.Add(btnBack);
  352.     }
  353.     protected Collection<PSObject> runposh(string strCommand)
  354.     {
  355.         Runspace rs = GetRunspace();
  356.             Pipeline currentPipeline = GetPipeline(rs, strCommand);
  357.             if (currentPipeline.PipelineStateInfo.State == PipelineState.NotStarted)
  358.             {
  359.                 Collection<PSObject> results = currentPipeline.Invoke();
  360.                 currentPipeline.Dispose();
  361.                 Cache.Remove("currentPipe");
  362.                 return (results);
  363.             }
  364.         else
  365.         {
  366.             return null;
  367.         }
  368.     }
  369.     protected Runspace GetRunspace()
  370.     {
  371.         if (Cache["rs"] == null)
  372.         {
  373.             Runspace rs = RunspaceFactory.CreateRunspace();
  374.             rs.Open();
  375.             Cache["rs"] = rs;
  376.         }
  377.         return (Runspace)Cache["rs"];
  378.     }
  379.     protected Pipeline GetPipeline(Runspace rs, string strCommand)
  380.     {
  381.         if (Cache["currentPipe"] == null)
  382.         {
  383.             Pipeline currentPipeline = rs.CreatePipeline(strCommand);
  384.             Cache["currentPipe"] = currentPipeline;
  385.         }
  386.         return (Pipeline)Cache["currentPipe"];
  387.  
  388.     }
  389. }

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me