2017-08-30 54 views
2

我已经尝试了几种收集服务数据的方法,而且我似乎无法得到满足所有需求的方法。 Get-Service工作正常,但是当我在几个Where-Object属性中管道时非常慢。 Get-CimInstance速度要快得多,但我无法弄清楚如何排除服务。有任何想法吗?PowerShell Get-Service返回结果速度很慢

这是我迄今为止的代码尝试。这一个是快速的,直到我加入Where-Object。然后,它需要3倍的时间,如果我这样做:

Get-Service -DisplayName * -ComputerName $Name -Exclude $ExcludedServices | Where-Object { $_.status -eq 'Running' -or $_.StartType -eq 'Automatic' } 

这一个工程要快得多,但我不知道如何,如果需要排除的服务列表:

Get-CimInstance -ClassName Win32_Service -ComputerName $Name | Where-Object { $_.state -eq 'Running' -or $_.StartMode -eq 'Auto' } 

回答

2

我不知道如何在需要时

Get-CimInstance允许你强加给查询WQL WHERE clause约束排除服务的列表:

Get-CimInstance Win32_Service -Filter 'Name != "excludedSvc"' 

您还可以限制基于查询里面的StateStartMode性质的项目,因此远程计算机没有发回的所有服务:

Get-CimInstance Win32_Service -Filter 'Name != "excludedSvc" AND State = "Running" AND StartMode = "Auto"' 
+0

这确实为我工作。但是,我将如何排除多个服务,而不是一个......我似乎无法找到任何在线工作示例。 – TSchwa

+0

''Name!=“svc1”AND Name!=“svc2”AND Name!=“svc3”''等等...... –

+0

啊,我用的是OR而不是AND。谢谢! – TSchwa