使用 powershell 脚本通过 c# 重新启动应用程序池
Restarting App Pool via c# using powershell script
我正在尝试重新启动远程服务器上的 iis 应用程序池。首先,我想停止应用程序池,但是我收到
Cannot convert the "{ Stop-WebAppPool -Name "BaymentPool" }" value of
type "System.String" to type
"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);
}
}
我不太明白我做错了什么。我知道我需要分别添加每个参数,我想我正在做,但它仍然抱怨。
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
一个简单的解决方案可能是:
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();
}
我正在尝试重新启动远程服务器上的 iis 应用程序池。首先,我想停止应用程序池,但是我收到
Cannot convert the "{ Stop-WebAppPool -Name "BaymentPool" }" value of type "System.String" to type "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);
}
}
我不太明白我做错了什么。我知道我需要分别添加每个参数,我想我正在做,但它仍然抱怨。
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
一个简单的解决方案可能是:
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();
}