在C#错误中运行powershell命令,“无法调用此函数,因为当前主机未实现它”

时间:2010-11-18 20:11:20

标签: c# .net asp.net powershell exchange-server

我有一个应用程序,用于在C#代码中运行Exchange Powershell命令,如下所示。这是我用来运行powershell命令的相关行的示例。

            RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
        PSSnapInException snapInException = null;

        //load Exchange shell
        rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 
        Runspace runSpace = RunspaceFactory.CreateRunspace(rsConfig);

        //open runspace
        runSpace.Open();

        //setup pipeline
        Pipeline pipeLine = runSpace.CreatePipeline();
        String sScript = "get-mailbox -identity 'rj'";

        //add script to pipeline
        pipeLine.Commands.AddScript(sScript);

        //run the script
        pipeLine.Invoke();
        pipeLine.Dispose();

到目前为止,此代码在所有情况下都非常完美。我试图运行的脚本而不是上面的脚本是为邮箱设置RetentionPolicy。我试图运行的脚本如下所示:

Set-Mailbox -Identity'rj'-RetentionPolicy'主要校园保留政策'

当我在powershell中运行它时,它运行得很好但是当我尝试使用下面的代码运行它时,我得到错误,“无法调用此函数,因为当前主机没有实现它。”

从这个错误中,几乎看起来在C#中运行的命令无法运行RetentionPolicy命令,但这没有多大意义。我用谷歌搜索了所有的建议,但没有运气。

如果有人知道为什么会这样,那将会非常有帮助。

1 个答案:

答案 0 :(得分:11)

如果该命令通常会提示确认,那么您需要:

  • -Confirm:$false设置为参数(也可能是-Force
  • 在调用Set-Mailbox之前设置$ConfirmPreference = "None"(也可能是-Force
  • 创建主机并实施确认功能; - )