【发布时间】:2020-11-17 05:37:02
【问题描述】:
我正在使用 System.Management.Automation.dll 从 ASP.NET WebAPI 调用 powershell 命令。 我正在尝试根据需要从 ASP.NET WebAPI 启动和停止 Windows 服务。 在我的本地机器上它工作正常。
但是当我调用 API 来启动或停止 Windows 服务时,它给了我以下错误, 找不到服务名称为“Log Reader”的任何服务。
正在使用以下命令,
Start-Service -Name 'Log Reader' -Verbose
Stop-Service -Name 'Log Reader' -Verbose
我的代码是,filename是powershell命令文件的名字,
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
var ps = PowerShell.Create();
ps.Runspace = runspace;
string script = GetScript(status, fileName);
ps.Commands.AddScript(script);
var result = ps.Invoke();
StringBuilder sb = new StringBuilder();
foreach (var r in result)
{
sb.Append(r.ToString());
sb.Append("\n");
}
sb.Remove(0, sb.Length);
foreach (var error in ps.Streams.Error.ReadAll())
{
sb.Append(error.ToString());
sb.Append("\n");
}
runspace.Close();
在这里,我使用服务帐户作为应用程序池标识。Windows 服务也使用 powershell 调用一些命令,并且在同一个服务帐户下完美执行。
我认为这可能与 IIS 有关。请帮帮我。
【问题讨论】:
-
如果您所做的只是停止/启动服务,则根本不需要调用 PowerShell 脚本 - 您可以使用 C# 中的 ServiceController 类 - 请参阅 stackoverflow.com/questions/11062841/…。如果您仍然非常想使用 PowerShell,请尝试在交互式控制台中的服务器上运行脚本,以确保它首先在那里工作 - 您可能会发现问题出在脚本中,而不是您调用它的方式。
标签: c# asp.net powershell asp.net-web-api