我有以下代码通过执行Powershell脚本停止IIS应用程序池:
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript("Set-ExecutionPolicy -Scope LocalMachine Unrestricted");
string stopCommand = File.ReadAllText($"{scriptPath}StopIISPool.ps1");
ps.AddScript(stopCommand);
ps.AddScript($"StopIISAppPool -StopScriptPath {scriptPath}IISStopCommand.ps1 -poolName {paths.IISAppPoolName}");
ps.Invoke();
Collection<ErrorRecord> errors = ps.Streams.Error.ReadAll();
}
这里的StopIISPool.ps1包含以下powershell脚本:
function StopIISAppPool
{
Param(
[parameter(Mandatory=$true)]
[string]$stopScriptPath,
[parameter(Mandatory=$true)]
[string]$poolName
)
process
{
PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -windowstyle hidden -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -noexit -File $stopScriptPath -poolName $poolname' -Verb RunAs}";
}
}
此处stopScriptPath是以下命令的路径,该命令仅在提升权限的情况下执行且无错误:
Param(
[parameter(Mandatory=$true)]
[string]$poolName
)
Stop-WebAppPool -Name $poolName;
上述C#代码在ASP.NET Core应用程序中运行。 当我在Windows Server 2012 R2上的IIS下部署应用程序并运行时,我在ps.Invoke()行上收到以下错误:
启动进程无法识别为cmdlet,函数,脚本文件或可运行程序的名称。
有人可以解释为什么我会收到这个错误吗?
答案 0 :(得分:1)
我已经解决了这个问题。实际上我找到了一个解决方法。为了操作IIS应用程序池,我切换到Windows命令行而不是PowerShell。 我使用了以下命令:
<div class="col-xs-4">
<button type="button" class="pull-right btn btn-sm btn-default"><i class="icon-budicon-175"></i></button>
<button type="button" class="pull-right btn btn-sm btn-default"><i class="icon-budicon-176"></i></button>
</div>