关于PowerShellGet-Service的坑-创新互联

起因

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

创新互联自2013年创立以来,公司以网站设计制作、网站设计、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户数千家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。

实现

传入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"
}

网页名称:关于PowerShellGet-Service的坑-创新互联
网址分享:http://pwwzsj.com/article/gcpds.html