【问题标题】:Restarting App Pool via c# using powershell script使用 powershell 脚本通过 c# 重新启动应用程序池
【发布时间】:2015-12-23 12:59:13
【问题描述】:

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

无法转换“{ Stop-WebAppPool -Name "BaymentPool" }" 的值 键入“System.String”以键入 “System.Management.Automation.ScriptBlock”。

异常

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);
        }
    }

我无法完全理解我做错了什么。我知道我需要单独添加每个参数,我想我正在这样做,但是它仍然会抱怨。

【问题讨论】:

    标签: c# powershell-3.0


    【解决方案1】:

    一个简单的解决方案可能是:

    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();
                }
    

    【讨论】:

      【解决方案2】:

      scriptblock 参数应该是 ScriptBlock 类型

      invokeCmd.Parameters.Add("ScriptBlock", ScriptBlock.Create("{ Stop-WebAppPool -Name \"BaymentPool\" }"));
      

      您检查结果的代码不正确,转换为 Process 对象的代码将不起作用。在此处查看有关如何检查调用结果的示例: http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx

      【讨论】:

      • 太棒了。添加“ScriptBlock.Create(”后,我不再收到异常,但是,我的应用程序池没有停止。
      • @Kam 你得到了什么做什么?管道的输出是什么?您是否收到错误消息?
      • @PanagiotisKanavos 输出 = Count = 0。没有错误消息
      • 只是一个简单的问题,我需要传递凭据还是使用 AD?
      猜你喜欢
      • 2014-02-13
      • 2011-11-04
      • 2017-07-06
      • 1970-01-01
      • 2016-08-04
      • 2019-04-10
      • 2010-09-19
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多