C# WinRM服务无法处理该请求。具有客户端指定的命令ID的命令已存在

C# WinRM服务无法处理该请求。具有客户端指定的命令ID的命令已存在,c#,powershell,exchange-server,powershell-3.0,C#,Powershell,Exchange Server,Powershell 3.0,当我在Visual Studio 2015中调试时运行下面的代码时,它可以正常工作。当它部署到IIS时,我在第二行ps.Invoke()处遇到以下错误: WinRM服务无法处理该请求。命令已存在 使用客户端指定的命令ID public静态PowerShellResponse AddToDistributionGroup(凭据凭据凭据、字符串组名、字符串成员电子邮件) { PSCredential cred=新的PSCredential(creds.Username、creds.Password.

当我在Visual Studio 2015中调试时运行下面的代码时,它可以正常工作。当它部署到IIS时,我在第二行
ps.Invoke()
处遇到以下错误:

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

public静态PowerShellResponse AddToDistributionGroup(凭据凭据凭据、字符串组名、字符串成员电子邮件)
{
PSCredential cred=新的PSCredential(creds.Username、creds.Password.tosecuretring());
WSManConnectionInfo connectionInfo=新的WSManConnectionInfo(新Uri(Settings.ExchangeServerAutomationUrl)、Settings.ExchangeAutomationSchemaName、cred);
connectionInfo.AuthenticationMechanism=AuthenticationMechanism.Kerberos;
使用(Runspace Runspace=RunspaceFactory.CreateRunspace(connectionInfo))
{
使用(PowerShell ps=PowerShell.Create())
{
Open();
ps.运行空间=运行空间;
//无法通过管道将您添加到DistributionGroupMember b/c。当成员已存在时,它会引发w/“空引用异常”
var群=
附言
.AddCommand(“获取分发组”)
.AddParameter(“标识”,组名)
.AddParameter(“OrganizationalUnit”,creds.GetUserDN())
.Invoke()
.SingleOrDefault();
如果(组==null)
返回新的PowerShellResponse(){Errors=新列表{“找不到组”。};
ps.AddStatement();
ps.AddCommand(“添加DistributionGroupMember”)
.AddParameter(“标识”,((动态)组).Identity)
.AddParameter(“成员”,成员电子邮件);
ps.Invoke();//这就是显示错误的地方
返回ps.GetResponse();
}
}
}
我正在使用C#和PowerShell 3.0连接到Exchange(API文档:),试图向Exchange中的通讯组添加成员


PowerShellResponse
是我们拥有的一个自定义类,
ps.GetResponse()
是一个自定义函数,用于创建所述的
PowerShellResponse
由于无法在任何在线位置找到讨论过的此错误,我提出的解决方案不是在一个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();
        }
    }
}
public静态PowerShellResponse AddToDistributionGroup(凭据凭据凭据、字符串组名、字符串成员电子邮件)
{
PSCredential cred=新的PSCredential(creds.Username、creds.Password.tosecuretring());
WSManConnectionInfo connectionInfo=新的WSManConnectionInfo(新Uri(Settings.ExchangeServerAutomationUrl)、Settings.ExchangeAutomationSchemaName、cred);
connectionInfo.AuthenticationMechanism=AuthenticationMechanism.Kerberos;
PSObject组;
使用(Runspace Runspace=RunspaceFactory.CreateRunspace(connectionInfo))
{
使用(PowerShell ps=PowerShell.Create())
{
Open();
ps.运行空间=运行空间;
团体=
附言
.AddCommand(“获取分发组”)
.AddParameter(“标识”,组名)
.AddParameter(“OrganizationalUnit”,creds.GetUserDN())
.Invoke()
.SingleOrDefault();
}
}
//无法通过管道将您添加到DistributionGroupMember b/c。当成员已存在时,它会引发w/“空引用异常”
如果(组==null)
返回新的PowerShellResponse(){Errors=新列表{“找不到组”。};
使用(Runspace Runspace=RunspaceFactory.CreateRunspace(connectionInfo))
{
使用(PowerShell ps=PowerShell.Create())
{
Open();
ps.运行空间=运行空间;
ps.AddCommand(“添加DistributionGroupMember”)
.AddParameter(“标识”,((动态)组).Identity)
.AddParameter(“成员”,成员电子邮件);
ps.Invoke();
返回ps.GetResponse();
}
}
}

由于无法在任何在线位置找到讨论过的此错误,我提出的解决方案不是在一个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();
        }
    }
}
public静态PowerShellResponse AddToDistributionGroup(凭据凭据凭据、字符串组名、字符串成员电子邮件)
{
PSCredential cred=新的PSCredential(creds.Username、creds.Password.tosecuretring());
WSManConnectionInfo connectionInfo=新的WSManConnectionInfo(新Uri(Settings.ExchangeServerAutomationUrl)、Settings.ExchangeAutomationSchemaName、cred);
connectionInfo.AuthenticationMechanism=AuthenticationMechanism.Kerberos;
PSObject组;
使用(Runspace Runspace=RunspaceFactory.CreateRunspace(connectionInfo))
{
使用(PowerShell ps=PowerShell.Create())
{
Open();
ps.运行空间=运行空间;
团体=
附言
.AddCommand(“获取分发组”)
.AddParameter(“标识”,组名)
.AddParameter(“OrganizationalUnit”,creds.GetUserDN())
.Invoke()
.SingleOrDefault();
}
}
//无法通过管道将您添加到DistributionGroupMember b/c。当成员已存在时,它会引发w/“空引用异常”
如果(组==null)
返回新的PowerShellResponse(){Errors=新列表{“找不到组”。};
使用(Runspace Runspace=RunspaceFactory.CreateRunspace(connectionInfo))
{
使用(PowerShell ps=PowerShell.Create())
{
Open();
ps.Runspace=runspac