Click here to Skip to main content
15,924,507 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hello All,

I am trying to run exchange server 2010 monitoring commands using C#. Here is my code...

C#
string password = "abc123"; 
string userName = @"me.com\Administrator";
System.Uri uri = new Uri("http://192.168.1.194/powershell?serializationLevel=Full");
System.Security.SecureString securePassword = String2SecureString(password);
System.Management.Automation.PSCredential creds = new System.Management.Automation.PSCredential(userName, securePassword);
Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();
PowerShell powershell = PowerShell.Create();
PSCommand command = new PSCommand();
command.AddCommand("New-PSSession");
command.AddParameter("ConfigurationName", "Microsoft.Exchange");
command.AddParameter("ConnectionUri", uri);
command.AddParameter("Credential", creds);
command.AddParameter("Authentication", "Default");
PSSessionOption sessionOption = new PSSessionOption();
sessionOption.SkipCACheck = true;
sessionOption.SkipCNCheck = true;
sessionOption.SkipRevocationCheck = true;
command.AddParameter("SessionOption", sessionOption);
powershell.Commands = command;
try
   {
       runspace.Open();
       powershell.Runspace = runspace;
       Collection<PSSession> result = powershell.Invoke<PSSession>();
       foreach (ErrorRecord current in powershell.Streams.Error)
       {
             throw new Exception("Exception: " + current.Exception.ToString());
       }
       if (result.Count != 1)
          throw new Exception("Unexpected number of Remote Runspace connections    
          returned.");

       powershell = PowerShell.Create();
       command = new PSCommand();
       command.AddCommand("Set-Variable");
       command.AddParameter("Name", "ra");
       command.AddParameter("Value", result[0]);
       powershell.Commands = command;
       powershell.Runspace = runspace;
       powershell.Invoke();

       powershell = PowerShell.Create();
       command = new PSCommand();
       command.AddScript("Import-PSSession -Session $ra");
       powershell.Commands = command;
       powershell.Runspace = runspace;
       powershell.Invoke();

       System.Collections.ObjectModel.Collection<PSObject> results = new 
       System.Collections.ObjectModel.Collection<PSObject>();

       powershell = PowerShell.Create();
       powershell.Runspace = runspace;

       System.IO.StreamReader sr = new System.IO.StreamReader("..\\..\\Script.ps1");
       powershell.AddScript(sr.ReadToEnd());
       powershell.Runspace.SessionStateProxy.SetVariable("proc", "C*");
       powershell.Runspace.SessionStateProxy.SetVariable("mbx", "*MBX");

       results = powershell.Invoke();

       if (powershell.Streams.Error.Count > 1)
       {
           foreach (ErrorRecord er in powershell.Streams.Error)
                  Console.WriteLine(er.ErrorDetails);
       }
       else
       {
           foreach (PSObject ps in results)
           {
                   Console.WriteLine(ps.Properties["Name"].Value.ToString());
           }
       }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        runspace.Dispose();
        runspace = null;
        powershell.Dispose();
        powershell = null;
     }


But Unfortunately, I landed in the below exception.
C#
<pre>Exception: System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server failed with the following error message : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>
 For more information, see the about_Remote_Troubleshooting Help topic.
</pre>


Can anyone help me to solve this?

I have referred the below link for this.
powershell[^]

Thanks & Regards
Sebastian
Posted
Updated 17-May-12 19:07pm
v2

1 solution

First, check if your URL is correct.
Based on the error message, there might be something wrong with Exchange server configuration.
Have you enabled Remote Exchange Management Shell as described here:
http://www.msexchange.org/articles_tutorials/exchange-server-2010/management-administration/management-administration/exchange-2010-management-architecture-single-machine-manage-multiple-exchange-2010-organizations.html[^]

Also, this loop makes no sence, if there are errors only first will be thrown as new exception and execution will jump to your catch/finally section:
C#
foreach (ErrorRecord current in powershell.Streams.Error)
{
    throw new Exception("Exception: " + current.Exception.ToString());
}
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900