起因
有一个业务需求,客户给了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"
}