我正在查询远程服务器上的特定服务,试图确定这些服务的状态,并相应地启动/停止/暂停它们。
我的服务器对象类的片段如下:
public class Server
{
public ManagementClass Services { get; set; }
public List<string> TargetServices { get; set; }
}
我使用 ManagementClass 对象连接到我的服务器作为其他必需品(Scope、ConnectionOptions 和 ManagementPath("Win32_Service"))。TargetedServices 只是我定义的一小部分服务,我打算在其中定位我的连接结果中返回的所有服务。我的 TargetedService 示例如下:
server.TargetedServices = new List<string>() { "ServiceA", "ServiceB" };
现在,当我希望从所有可用服务中找到我在我的小列表中定义的服务时,我的挣扎就开始发挥作用了……为了隔离和操纵它们。我已经完成了任务,但处理速度非常慢。我希望找到一个聪明的,简化的解决方案。有什么想法吗?
这是我目前的(畏缩)逻辑:
public void PingServices(List<Server> servers)
{
foreach(Server server in servers)
{
foreach(ManagementObject service in server.Services.GetInstances())
{
foreach(string target in server.TargetServices)
{
if(service.GetPropertyValue("Name").ToString() == target)
{
service.InvokeMethod("StartService", null);
}
}
}
}
}