【问题标题】:How to call Powershell command from ASP.NET如何从 ASP.NET 调用 Powershell 命令
【发布时间】: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


【解决方案1】:

应用程序池用户存在访问权限问题。一旦获得权限,我就可以调用 Windows 服务。

【讨论】:

  • 这会削弱安全性。您现在冒着黑客执行恶意脚本的风险。您应该改用 ServiceController,或使用 WMI
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2016-12-12
相关资源
最近更新 更多