2016-07-28 86 views
0

指定当我运行在Visual Studio 2015年以下,而调试的代码,它工作正常命令ID存在。当它被部署到IIS时,在第二个ps.Invoke()行处出现以下错误:WinRM服务无法处理请求。一个命令已经与客户端

WinRM服务无法处理请求。命令已存在 与客户端指定的命令ID。

public static PowerShellResponse AddToDistributionGroup(Credentials creds, string groupName, string memberEmail) 
{ 
    PSCredential cred = new PSCredential(creds.Username, creds.Password.ToSecureString()); 

    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri(Settings.ExchangeServerAutomationUrl), Settings.ExchangeAutomationSchemaName, cred); 
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 

    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)) 
    { 
     using (PowerShell ps = PowerShell.Create()) 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 
      //can't pipe OU to Add-DistrubtionGroupMember b/c it blows up w/ "null reference exception" when member already exists 

      var group = 
        ps 
         .AddCommand("Get-DistributionGroup") 
          .AddParameter("Identity", groupName) 
          .AddParameter("OrganizationalUnit", creds.GetUserDN()) 
         .Invoke() 
         .SingleOrDefault(); 

      if (group == null) 
       return new PowerShellResponse() { Errors = new List<string> { "Group not found." } }; 

      ps.AddStatement(); 

      ps.AddCommand("Add-DistributionGroupMember") 
       .AddParameter("Identity", ((dynamic)group).Identity) 
       .AddParameter("Member", memberEmail); 

      ps.Invoke(); //this is where the error shows up 

      return ps.GetResponse(); 
     } 
    } 
} 

我连接到Exchange(API文档:https://technet.microsoft.com/en-us/library/dn641234(v=exchg.160).aspx)使用C#和PowerShell 3.0试图成员在Exchange添加到通讯组。

PowerShellResponse是我们自定义的类,而ps.GetResponse()是创建PowerShellResponse的自定义函数。

回答

0

具有不能够在网上找到的任何地方讨论了这个错误,解决方案,我想出了一个using语句不调用ps.Invoke()两次。以下的罚款本地和部署后IIS:

public static PowerShellResponse AddToDistributionGroup(Credentials creds, string groupName, string memberEmail) 
{ 
    PSCredential cred = new PSCredential(creds.Username, creds.Password.ToSecureString()); 

    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri(Settings.ExchangeServerAutomationUrl), Settings.ExchangeAutomationSchemaName, cred); 
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 

    PSObject group; 

    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)) 
    { 
     using (PowerShell ps = PowerShell.Create()) 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 

      group = 
        ps 
         .AddCommand("Get-DistributionGroup") 
          .AddParameter("Identity", groupName) 
          .AddParameter("OrganizationalUnit", creds.GetUserDN()) 
         .Invoke() 
         .SingleOrDefault(); 
     } 
    } 

    //can't pipe OU to Add-DistrubtionGroupMember b/c it blows up w/ "null reference exception" when member already exists 
    if (group == null) 
     return new PowerShellResponse() { Errors = new List<string> { "Group not found." } }; 

    using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)) 
    { 
     using (PowerShell ps = PowerShell.Create()) 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 

      ps.AddCommand("Add-DistributionGroupMember") 
       .AddParameter("Identity", ((dynamic)group).Identity) 
       .AddParameter("Member", memberEmail); 

      ps.Invoke(); 

      return ps.GetResponse(); 
     } 
    } 
} 
相关问题