【发布时间】:2021-01-25 19:22:50
【问题描述】:
我有一个 .net 应用程序,我希望能够启动和停止在同一台计算机上运行的 Windows 服务。我能够毫无问题地使用 get-service 拉回服务的状态,但是执行 start-service 不起作用。没有错误,只是什么都不做。我首先尝试了这个,没有使用 async Invoke 选项,这样它看起来更像底部的函数。本地调试时,不工作,不报错。
using System.Management.Automation;
private async static Task EditService(string serviceName, string command)
{
using (PowerShell PowerShellInst = PowerShell.Create())
{
//PowerShellInst.AddCommand(command).AddParameter("Name", serviceName);
//I tried surrounding serviceName in quotes (but it has no spaces)
PowerShellInst.AddScript("Start-Service -Name " + serviceName);
await PowerShellInst.InvokeAsync();
}
}
获取服务状态(可行):
public static string GetServiceStatus(string serviceName)
{
using (PowerShell PowerShellInst = PowerShell.Create())
{
PowerShellInst.AddScript("Get-Service " + serviceName);
Collection<PSObject> PSOutput = PowerShellInst.Invoke();
if (PSOutput == null || PSOutput.Count == 0)
return "Unknown";
else
return PSOutput.First().Properties["Status"].Value.ToString();
}
}
【问题讨论】:
-
我要尝试的第一件事是对
Get-Service和Start-Service使用相同的语法,在 PowerShell 中两者都应该可以工作,但不确定在这个包装的场景中。所以只需删除Start-Service的-Name部分即可排除。 -
@PMental 这并没有什么不同,所以我们可以排除这种情况。我想知道这是否像转换器建议的答案那样是权限问题
标签: .net powershell windows-services