如何使用 shell 命令的输出作为配方中的条件值

how do I use the output of a shell command as a conditional value in a recipe

这就是我想要做的:

  1. 首先检查服务器上是否安装了证书
  2. 如果未安装,请将 pfx 复制到临时位置
  3. 安装 pfx
  4. 删除 pfx

如何在食谱中执行此操作?

这是一些半伪代码:

unless "ls Cert:\LocalMachine\My\ | ?{$_.Subject -like '*#{cert_name}*'}"

  cookbook_file cert_temp_path do
    source cert_name
  end

  windows_certificate "c:/test/mycert.pfx" do
      pfx_password    'MyPass!'
  end

end

如何执行那行 PS 代码?我可以以某种方式直接调用 powershell_script 资源吗?

这不是您使用 Chef 的方式。 Chef 要求您重新考虑收敛行为,而不是程序步骤。在这种情况下,您的最终状态将是:

  1. 证书的说明书文件已复制到缓存路径。
  2. 证书已导入。

相信 cookbook_filewindows_certificate 本身是幂等和收敛的,这意味着它们只会在需要时处理。

这就是我需要的:Chef NOT_IF and ONLY_IF validation issue in Windows recipes

我需要 guard_interpreter 设置。

将此添加到与 pfx 一起使用的任何资源调用可解决我的问题:

guard_interpreter :powershell_script
not_if "My powershell code"