Ruby Chef Powershell输出捕获到最新Chef 12中的属性中

Ruby Chef Powershell输出捕获到最新Chef 12中的属性中,ruby,windows,powershell,chef-infra,iaas,Ruby,Windows,Powershell,Chef Infra,Iaas,好吧,我卡住了。我试图读取.Net文件的version属性并将其保存到节点的属性中。因此,我可以在节点的属性中看到服务器端安装的程序的版本 我可以像这样运行powershell脚本: powershell_script 'filever' do code <<-EOH [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\\Program Files\\Internet Explorer\\iexplo

好吧,我卡住了。我试图读取.Net文件的version属性并将其保存到节点的属性中。因此,我可以在节点的属性中看到服务器端安装的程序的版本

我可以像这样运行powershell脚本:

powershell_script 'filever' do
    code <<-EOH
       [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\\Program Files\\Internet Explorer\\iexplore.exe").FileVersion > C:\\windows\\temp\\fileversion.txt
       get-content -Path  C:\\windows\\temp\\fileversion.txt
    EOH
end

我有所有的小部分,但我似乎无法使它们正确地凝胶。

这不是厨师的工作方式。资源没有这种方式的返回值,大多数资源不能设置属性。您必须使用ruby_块资源或LWRP,但其复杂性使其难以解释。我认为在Chef中,
powershell\u out
并不是一件真实的事情,你只是假设它的存在是因为
shell\u out
,还是你在文档中的某个地方看到了它?

好吧,所以问题是读取的文件是在菜谱的早期阶段运行的,而不是在应该运行的最后。以下是任何可能需要将文件读入属性并将其发回服务器的用户的工作版本

#Check the installed version
powershell_script 'filever' do
code <<-EOH
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\\Program Files\\Internet Explorer\\iexplore.exe").FileVersion > c://chef//fileversion.txt
EOH
end

#report back after all is done
ruby_block "reportback" do
  block do
    encoding_options = {
        :invalid           => :replace,  # Replace invalid byte sequences
        :undef             => :replace,  # Replace anything not defined in ASCII
        :replace           => '',        # Use a blank for those replacements
        :universal_newline => true       # Always break lines with \n
      }
      node.normal[:ixserver][:Version_Installed] = File.read("C:\\chef\\fileversion.txt").encode(Encoding.find('ASCII'), encoding_options)
  end
end
#检查已安装的版本
powershell\u脚本“filever”do
代码:replace,#replace无效字节序列
:undef=>:replace,#替换ASCII中未定义的任何内容
:replace=>“”,#为这些替换使用空白
:universal_newline=>true#始终使用分隔线\n
}
node.normal[:ixserver][:Version\u Installed]=File.read(“C:\\chef\\fileversion.txt”).encode(Encoding.find('ASCII'),Encoding\u选项)
结束
结束

它已被移动到windows cookbook

从:

Chef::Mixin::PowershellOut Mixin已移动到食谱中

从以下方面:

PR 115-使用前需要Chef::Mixin::PowershellOut


这已在厨师邮件列表中跟进。请不要无缘无故地交叉发帖。没错,我确实交叉发帖了,但我认为它与广大观众相关,因此我提出了一个问题。然后只在这里提问,让两个小组同时研究这个问题只会浪费他们中50%的时间。他得到答案的机会增加一倍,我想补充一点,这对两个小组的追随者都有好处,不是吗?只要答案都发布在这两个网站上,人们就不会继续浪费时间。互联网上有很多关于这一点的参考文献,这就是为什么我认为它存在的原因:例如:好的,这里的基本思想是让配方报告成功地发到服务器上。做这件事的合适机制是什么?哦,很好,它确实存在,因为windows cookbook与核心Chef名称空间相混淆:-(请记住这是在Chef 12之前,我不想将所有这些都包含在我的Chef中并污染它:-)因此这个问题谢谢您继续关注!我试图解决同样的问题&处理同样的问题,但是在读取文本文件时遇到了问题(读取了额外的无效字符)。这就解释了如何摆脱它们。
#Check the installed version
powershell_script 'filever' do
code <<-EOH
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\\Program Files\\Internet Explorer\\iexplore.exe").FileVersion > c://chef//fileversion.txt
EOH
end

#report back after all is done
ruby_block "reportback" do
  block do
    encoding_options = {
        :invalid           => :replace,  # Replace invalid byte sequences
        :undef             => :replace,  # Replace anything not defined in ASCII
        :replace           => '',        # Use a blank for those replacements
        :universal_newline => true       # Always break lines with \n
      }
      node.normal[:ixserver][:Version_Installed] = File.read("C:\\chef\\fileversion.txt").encode(Encoding.find('ASCII'), encoding_options)
  end
end