使用powershell脚本通过c#重新启动应用程序池

使用powershell脚本通过c#重新启动应用程序池,c#,powershell-3.0,C#,Powershell 3.0,我正在尝试重新启动远程服务器上的iis应用程序池。首先,我想停止应用程序池,但我得到了一个 无法转换的{Stop WebAppPool-Name“BaymentPool”}值 键入“System.String”以键入 “系统、管理、自动化、脚本块” 例外情况 public void StopAppPool() { Runspace runSpace = RunspaceFactory.CreateRunspace(); runSpace.Open();

我正在尝试重新启动远程服务器上的iis应用程序池。首先,我想停止应用程序池,但我得到了一个

无法转换的{Stop WebAppPool-Name“BaymentPool”}值 键入“System.String”以键入 “系统、管理、自动化、脚本块”

例外情况

public void StopAppPool()
    {
        Runspace runSpace = RunspaceFactory.CreateRunspace();
        runSpace.Open();

        Pipeline pipeline = runSpace.CreatePipeline();

        Command invokeCmd = new Command("Invoke-Command");
        invokeCmd.Parameters.Add("ComputerName","IISC02");
        invokeCmd.Parameters.Add("ScriptBlock","{ Stop-WebAppPool -Name \"BaymentPool\" }");
        pipeline.Commands.Add(invokeCmd);


        Collection<PSObject> output = pipeline.Invoke();
        foreach (PSObject psObject in output)
        {
            Process process = (Process)psObject.BaseObject;
            Console.WriteLine("Process name: " + process.ProcessName);
        }
    }
public void stopppool()
{
Runspace Runspace=RunspaceFactory.CreateRunspace();
Open();
Pipeline Pipeline=runSpace.CreatePipeline();
命令invokeCmd=新命令(“调用命令”);
invokeCmd.Parameters.Add(“ComputerName”、“IISC02”);
Add(“ScriptBlock”,“{Stop WebAppPool-Name\'BaymentPool\”}”);
pipeline.Commands.Add(invokeCmd);
集合输出=pipeline.Invoke();
foreach(输出中的PSObject PSObject)
{
进程进程=(进程)psObject.BaseObject;
Console.WriteLine(“进程名称:”+Process.ProcessName);
}
}

我不太明白我做错了什么。我知道我需要单独添加每个参数,我想我正在这样做,但是它仍然会抱怨。

scriptblock参数应该是scriptblock类型

invokeCmd.Parameters.Add("ScriptBlock", ScriptBlock.Create("{ Stop-WebAppPool -Name \"BaymentPool\" }"));
检查结果的代码不正确,强制转换到流程对象将不起作用。在此处查看如何检查调用结果的示例:
一个简单的解决方案可以是:

var serverManager = ServerManager.OpenRemote("000.000.000.000"); // Ip Address of Remote server

            var appPool = serverManager.ApplicationPools["MyAppPool"];

            if (appPool == null) return;

            if (appPool.State == ObjectState.Stopped)
            {
                appPool.Start();
            }
            else
            {
                appPool.Recycle();
            }

伟大的添加“ScriptBlock.Create(”)后,我不再收到异常,但是我的应用程序池没有停止。@Kam您得到了什么?管道的输出是什么?是否收到错误消息?@PanagiotisKanavos output=Count=0。没有错误消息只是一个简单的问题,我需要传递凭据还是使用AD?