public static List <ExchangeMailbox> ProcessMBOXOutput(RequestOutput mboxoutput) { List <ExchangeMailbox> mailboxes = new List <ExchangeMailbox>(); String SamAccountName = "", Alias = "", DisplayName = "", EmailAddress = ""; // SamAccountName -> Alias -> DisplayName -> PrimarySmtpAddress for (int i = 0, len = mboxoutput.ResponseTitles.Count(); i < len; i++) { if (mboxoutput.ResponseTitles[i].Contains("SamAccountName")) { SamAccountName = mboxoutput.ResponseValues[i]; } if (mboxoutput.ResponseTitles[i].Contains("Alias")) { Alias = mboxoutput.ResponseValues[i]; } if (mboxoutput.ResponseTitles[i].Contains("DisplayName")) { DisplayName = mboxoutput.ResponseValues[i]; } if (mboxoutput.ResponseTitles[i].Contains("PrimarySmtpAddress")) { EmailAddress = mboxoutput.ResponseValues[i]; mailboxes.Add(new ExchangeMailbox(SamAccountName, Alias, DisplayName, EmailAddress)); SamAccountName = ""; Alias = ""; DisplayName = ""; EmailAddress = ""; } } return(mailboxes); }
public void DoWork(object sender, DoWorkEventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); BackgroundWorker worker = sender as BackgroundWorker; Runspace rSpace; SecureString secpass = new SecureString();; for (int i = 0; i < password.Length; i++) { secpass.AppendChar(password[i]); } PSCredential cred = new PSCredential(username, secpass); WSManConnectionInfo connectionInfo = new WSManConnectionInfo( new Uri("https://" + ip + "/Powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", cred); connectionInfo.SkipCACheck = true; connectionInfo.SkipRevocationCheck = true; connectionInfo.SkipCNCheck = true; LogMan.AddDebug("Trying to connect to \"https://" + ip + "/Powershell\""); connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic; rSpace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); try { rSpace.Open(); Pipeline pipeLine = rSpace.CreatePipeline(); if (scripting) { pipeLine.Commands.AddScript(this.workScript); LogMan.AddDebug("Console Script: " + workScript.ToString()); } else { foreach (Command cmd in this.workCMD) { pipeLine.Commands.Add(cmd); System.Console.WriteLine(cmd.ToString()); String parameters = ""; for (int i = 0; i < cmd.Parameters.Count; i++) { parameters += " -" + cmd.Parameters[i].Name + " " + cmd.Parameters[i].Value; } LogMan.AddDebug("Console: " + cmd.ToString() + parameters); } } Collection <PSObject> commandResults = pipeLine.Invoke(); RequestOutput outdata = new RequestOutput(); foreach (PSObject cmdlet in commandResults) { foreach (PSPropertyInfo prop in cmdlet.Properties) { try { outdata.Add(prop.Name.ToString(), prop.Value.ToString()); } catch (Exception) { } } } completed = true; PSBGCompletedEventArgs args = new PSBGCompletedEventArgs(); LogMan.AddDebug("Outdata: " + outdata.ToString()); args.Output = outdata.ToString(); args.OutData = outdata; args.Id = this.Id; args.failed = false; pipeLine.Dispose(); rSpace.Close(); if (Completed != null) { Completed(this, args); } } catch (Exception exc) { LogMan.AddDebug("Error: " + exc.Message); PSBGCompletedEventArgs args = new PSBGCompletedEventArgs(); args.Id = this.Id; args.failed = true; args.failmsg = exc.Message; rSpace.Close(); if (Completed != null) { Completed(this, args); } } }
public void ProcessRequestsOutput(object sender, PSBGCompletedEventArgs e) { if (this.requestsView.InvokeRequired) { CmdCompleteCallback d = new CmdCompleteCallback(ProcessRequestsOutput); this.Invoke(d, new object[] { sender, e }); } else { if (!e.failed) { //dataGridView1 List <ExchangeRequest> requests = new List <ExchangeRequest>(); ExchangeRequest req = new ExchangeRequest(); RequestOutput outd = e.OutData; for (int i = 0, len = outd.ResponseTitles.Count(); i < len; i++) { String title = outd.ResponseTitles[i].ToLower(); String value = outd.ResponseValues[i]; switch (title) { case "name": req.Name = value; break; case "status": req.Status = value; break; case "filepath": req.Filepath = value; break; case "sourcealias": req.SourceAlias = value; break; case "sourcemailboxidentity": req.SourceMailboxIdentity = value; break; case "contentfilter": req.ContentFilter = value; break; case "overallduration": req.OverallDuration = value; break; case "totalqueuedduration": req.TotalQueuedDuration = value; break; case "totalinprogressduration": req.TotalInProgressDuration = value; break; case "percentcomplete": req.PercentComplete = value; break; case "objectstate": requests.Add(req); req = new ExchangeRequest(); break; } } requestsView.ColumnCount = 7; requestsView.Columns[0].Name = "Name"; requestsView.Columns[1].Name = "Status"; requestsView.Columns[2].Name = "SourceAlias"; requestsView.Columns[3].Name = "SourceMailboxIdentity"; requestsView.Columns[4].Name = "TotalInProgressDuration"; requestsView.Columns[5].Name = "PercentComplete"; requestsView.Columns[6].Name = "FilePath"; int c = 0; foreach (ExchangeRequest reqo in requests) { if (requestsView.Rows.Count > c) { requestsView.Rows[c].Cells[0].Value = reqo.Name; requestsView.Rows[c].Cells[1].Value = reqo.Status; requestsView.Rows[c].Cells[2].Value = reqo.SourceAlias; requestsView.Rows[c].Cells[3].Value = reqo.SourceMailboxIdentity; requestsView.Rows[c].Cells[4].Value = reqo.TotalInProgressDuration; requestsView.Rows[c].Cells[5].Value = reqo.PercentComplete; requestsView.Rows[c].Cells[6].Value = reqo.Filepath; } else { requestsView.Rows.Add(new string[] { reqo.Name, reqo.Status, reqo.SourceAlias, reqo.SourceMailboxIdentity, reqo.TotalInProgressDuration, reqo.PercentComplete, reqo.Filepath }); } switch (reqo.Status.ToLower()) { case "completed": requestsView.Rows[c].DefaultCellStyle.BackColor = Color.Green; break; case "failed": requestsView.Rows[c].DefaultCellStyle.BackColor = Color.Red; break; case "inprogress": requestsView.Rows[c].DefaultCellStyle.BackColor = Color.Cyan; break; default: requestsView.Rows[c].DefaultCellStyle.BackColor = Color.Yellow; break; } c++; } if (requestsView.Rows.Count > requests.Count) { for (int i = requests.Count; i < requestsView.Rows.Count; i++) { requestsView.Rows.RemoveAt(requestsView.Rows.Count - 1); } requestsView.Refresh(); } requestUpdate.Start(); } } }