如何使用厨师远程运行powershell脚本?

时间:2017-11-27 05:20:11

标签: powershell chef

我有一个powershell脚本,它存在于厨师服务器上以便在远程Windows服务器上运行,如何从远程Windows服务器上的厨师服务器运行这个powershell脚本。

3 个答案:

答案 0 :(得分:1)

厨师不会做这样的事情。首先,Chef Server永远不能直接远程访问服务器,它所做的只是存储数据。其次,厨师并不是真的“现在在一个地方经营一件事”。我们提供像knife sshknife winrm这样的工作站工具作为简单的包装器,但它们并不适用于任何复杂的工具。 Chef-y方法是使用powershell_script资源制作配方并运行脚本。

答案 1 :(得分:0)

这是否意味着厨师也在Windows服务器上运行? 如果是,为什么不使用Windows Ps工具中的psexec?

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

答案 2 :(得分:0)

以下是我对您要实现的目标的理解。如果我错了,请在评论中纠正我,我会更新我的答案。

  • 您有一个PowerShell脚本,您需要在特定服务器或一组服务器上运行。
  • 使用中央管理解决方案运行此脚本而不是登录每个服务器并手动运行它会很方便。
  • 你需要在没有填写条件的情况下在很多地方运行这个脚本,例如文件丢失,或者你需要经常运行这个脚本,或者你需要在某个时间运行这个脚本关于你正在进行的其他过程。

如果不知道您正在尝试使用脚本实现什么,我知道的最佳解决方案是编写一本食谱并执行以下操作之一

  • 如果您的脚本很复杂,请将其放在cookbook / files文件夹中(假设脚本在运行的所有计算机上都相同)或在cookbook / templates文件夹中(如果您需要在写入时将信息注入其中) )。然后,您可以在Chef与以下代码片段汇合时将.ps文件写入本地计算机。将它写入磁盘后,您还必须使用下一个项目符号中的一个命令调用它。

单态文件:

cookbook_file '<destination>' do source '<filename.ps>' <other options> end

可以在https://docs.chef.io/resource_cookbook_file.html

找到选项

多态文件:

template '<destination>' do
  source '<template.ps.erb>'
  variables {<hash of variables and values>}
  <other options>
end

可以在https://docs.chef.io/resource_template.html

找到选项
  • 如果您的脚本是简单的单行,则可以使用powershell_scriptpowershell_out!executepowershell_out!具有与shell_out!命令相同的选项和功能,以及在收到命令的退出状态(如果需要)之前,收敛将暂停的额外优势。关于使用它的文档有点不稳定,所以花时间尝试使用它和谷歌搜索。

https://docs.chef.io/resource_powershell_script.html https://docs.chef.io/resource_execute.html

您最终选择的最后一个选项可能是希望保护您的资源,条件是它不应该运行的时间,例如文件已经存在,设置了注册表项或者您的脚本改变了什么可以使用。如果你真的希望脚本执行每一次聚合,那么你可以跳过这一步,但这是代码味道,我敦促你重新考虑你的计划。

https://docs.chef.io/resource_common.html#guards

重要的是要注意,这不是详细列出如何在节点上运行powershell脚本,只是我见过的常见模式的集合。

希望这会有所帮助。