2017-06-29 60 views
0

是否可以在ruby_block中使用powershell_script? 我想在收敛阶段运行powershell脚本而不是编译阶段。 当前的代码不起作用:厨师 - 在ruby_block中使用powershell_script

ruby_block 'ruby block so that code is run during convergence phase and not compilation phase' do 
    block do 
     buildNumber = "123" 
     powershell_script 'run powershell script' do 
     environment ({'buildNumber' => buildNumber}) 
     code "path/to/script/script.ps1" 
     end 
    end 
action :run 
end 

我知道你可以在powershell_script使用保护的ruby_block的外部,使其收敛过程中运行,但我需要的是Ruby块中定义的局部变量buildNumber。

回答

0

下面的代码为我工作:

x = Chef::Resource::PowershellScript.new('unzipper script',run_context) 
    x.code 'D:/git/chef/cookbooks/java-8-upgrade/unzipper.ps1' 
    x.environment ({'buildNumber' => buildNumber}) 
    x.run_action :run 
+0

请不要使用它,它确实在某些情况下无法正常工作(例如ChefSpec测试)。 – coderanger

0

在简单情况下,你也许可以使用powershell_out的辅助方法。对于更复杂的情况,请制作自定义资源并使用常规资源。不要使用手动资源调用(Chef::Resource::Foo.new,因为我们明确不支持这一点,并知道它会破坏事物)。

+0

嘿,谢谢你的回复,并且对昨天的问题发表评论帮了我很多。你认为你可以提供一个使用powershell_out的例子吗?我真的不知道从哪里开始 –

+0

它的工作方式与'shell_out'相似,只不过您使用powershell而不是cmd.exe运行的字符串或直接运行。 – coderanger