使用 puppet exec 检测 windows 服务是否已经安装

Detecting if windows service is already installed using puppet exec

我有以下 exec 资源,用于安装 window 服务。

我希望它仅在未安装 window 服务时执行。所以我使用 onlyif 命令,但该命令不起作用。一直是运行安装:

exec { "install-${target_path}/${binary_name}":
    command   => "${installUtil_filepath} /i /servicename=\"${service_name}\" /displayname=\"${display_name}\" /description=\"${description}\" \"${target_path}\${binary_name}\"",
    onlyif    => "if((Get-Service \"${service_name}\" -ErrorAction SilentContinue).DisplayName -eq  ${display_name}) { exit 1 } else { exit 0 }",
    logoutput => true,
    provider => powershell,
  } 

这有效

if(Get-Service \"${service_name}\") { exit 1 } else { exit 0 }

为什么要先用服务名称检索服务,然后还要比较显示名称?您可以省略该检查...

此外,您不想在安装服务时使用 exit 0 退出,否则使用 1 退出吗?

试试这个:

onlyif    => "if(Get-Service ${service_name}) { exit 0 } else { exit 1 }",