关于PowerShell Get-Service的坑

起因

有一个业务需求,客户给了3个服务名称,如果windows服务器上有且仅有其中1个服务的时候,验证通过,处理某些逻辑。

实现

传入3个服务名称,使用 Get-Service -Name SERVICENAME 分别查询,将结果写入map返回。

$map={}
$service = Get-Service -Name SERVICENAME
if($service)
{
    $map[SERVICENAME] = "installed"
}
else
{
    $map[SERVICENAME] = "none"
}

结果

ServicesA installed
ServicesB installed
ServicesC none

事实上,服务器上只安装了ServicesA,怎么会存在ServicesB?
仔细看发现:
1.客户提供的ServicesB Name和ServicesA DisplayName一模一样。
2.ServicesA 和 ServicesB查出来的是同一个服务。

就算一模一样,也不该查出来同一个服务,因为我使用的命令是:Get-Service -Name SERVICENAME,这里指定了Name参数,并非DisplayName。
我们查看一下Get-Service的定义

本地验证

在本机随便找一个服务,使用Get-Service -Name SERVICENAME命令查询服务信息,分别传入Name和DisplayName作为 -Name 的参数

这......

FIX

$map={}
$service = Get-Service -Name SERVICENAME
if($service)
{
  if($service.Name -eq SERVICENAME)
  {
      $map[SERVICENAME] = "installed"
  }
  else
  {
     $map[SERVICENAME] = "none"
  }
}
else
{
    $map[SERVICENAME] = "none"
}
posted @ 2021-04-15 16:41  talentzemin  阅读(345)  评论(0编辑  收藏  举报