有没有办法在Get-Service和Get-WmiObject命令中包含服务的实例?

问题描述:

我正在尝试编写一个停止服务的脚本,如果它存在。我想停止的服务有多个实例,我试图根据给定的实例名称获取服务(它显示为ServiceName$InstanceName)。有没有办法在Get-Service和Get-WmiObject命令中包含服务的实例?

奇怪的是,当我运行以下命令:

Get-Service -Name "ServiceName*" | Format-List -Property Name 

Get-WmiObject -Class Win32_Service -Filter "name like 'ServiceName%'" | Format-List -Property Name 

结果如下所示:

Name : ServiceName$InstanceNameA 

Name : ServiceName$InstanceNameB 

Name : ServiceName$InstanceNameC 

Name : ServiceName$InstanceNameD 

Name : ServiceName$InstanceNameE 

Name : ServiceName$InstanceNameF 

鉴于上述结果,我认为如果我想搜索名为ServiceName的服务,并且实例为InstanceNameC我可以做类似

Get-Service -Name "ServiceName$InstanceNameC" 

Get-WmiObject -Class Win32_Service -Filter "name='ServiceName$InstanceNameC'" 

但它不工作,我期望的那样。

我想这个冗长的问题是:我可以通过传递适当的服务名称ServiceName$InstanceName来查找/获取特定服务实例吗?

+0

什么是你想要检索服务的名称?你可以使用'Get-Service | Get-Member'来查看你可以使用'Where-Object'过滤掉的属性 – TheIncorrigible1

+0

@TheIncorrigible1查看我的答案。我在发布我的问题后发现这个答案:https://*.com/a/1615145/1165441 – edhedges

+0

可能重复[Powershell脚本不接受$(美元)符号](https://*.com/questions/1615117/ powershell脚本不接受美元符号) – TheIncorrigible1

我很明显没有使用PowerShell的经验,但发现添加反引号(`)来转义分隔服务名称和实例名称的美元符号允许Get-Service按我的预期工作。

这里是什么工作:

Get-Service -Name "ServiceName`$InstanceNameC" 
+2

'$'用于变量。它们将在双引号内扩展。它试图找到名为“ServiceName”的服务名称,因为您没有名为'$ instancename'的变量。这也会起作用:'Get-WmiObject -Class Win32_Service -Filter'name =“ServiceName $ InstanceNameC”'' – Matt

+0

这很有效,它看起来像我没有看到的原因(看起来非常相似)是因为我在单引号之外有双引号。 – edhedges