厨师长:如果powershell guard声明的评估结果为真,则两个相互矛盾的not_
所以我和chef一起工作,如果前提条件成立,我需要将一些资源链接在一起。我需要检查流程的版本是否符合我的要求,如果是这样做的话。我看到了奇怪的行为,并注意到我的警卫声明并没有像我预期的那样被回避。所以我做了这个测试厨师长:如果powershell guard声明的评估结果为真,则两个相互矛盾的not_,powershell,chef-infra,chef-recipe,Powershell,Chef Infra,Chef Recipe,所以我和chef一起工作,如果前提条件成立,我需要将一些资源链接在一起。我需要检查流程的版本是否符合我的要求,如果是这样做的话。我看到了奇怪的行为,并注意到我的警卫声明并没有像我预期的那样被回避。所以我做了这个测试 log 'log_version' do message 'Peregrin Took' level :error guard_interpreter :powershell_script not_if <<-EOH (C:\\Pr
log 'log_version' do
message 'Peregrin Took'
level :error
guard_interpreter :powershell_script
not_if <<-EOH
(C:\\Program Files\\telegraf\\telegraf.exe --version) -Like '*1.7.2*'
EOH
end
log 'log_version' do
message 'Meriadoc Brandybuck'
level :error
guard_interpreter :powershell_script
not_if <<-EOH
(C:\\Program Files\\telegraf\\telegraf.exe --version) -NotLike '*1.7.2*'
EOH
end
为什么这两条语句都要记录?当我在vm中运行这些powershell代码段时,我得到一个返回true,另一个返回false。所以我希望只写一行日志。但当我运行时,他们都在写作
在阅读了一些内容之后,guard语句似乎通过$LASTEXITCODE
做出了决定,在我的语句中,这两个语句的$LASTEXITCODE
都是0
因此,我尝试更改我的guard语句以强制执行0以外的退出代码
log 'log_version' do
message 'Peregrin Took'
level :error
guard_interpreter :powershell_script
not_if <<-EOH
if((C:\\Program Files\\telegraf\\telegraf.exe --version) -Like '*1.7.2*') { exit 1 }
EOH
end
log 'log_version opposite' do
message 'Meriadoc Brandybuck'
level :error
guard_interpreter :powershell_script
not_if <<-EOH
if((C:\\Program Files\\telegraf\\telegraf.exe --version) -NotLike '*1.7.2*') { exit 1 }
EOH
end
log'log\u version'do
信息“百富勤带走”
级别:错误
guard\u解释器:powershell\u脚本
如果因此我得到了一个工作保护,问题是程序文件中的空间和--version
被解释为Powershell代码。把我的护绳做成这样
"(&'c:\\Program Files\\telegraf\\telegraf.exe' --version) -like '*#{node['windows']['telegraf']['version']}*'"
通过单次引用路径,powershell正确地解释了路径,我需要&
运算符,以便将括号中的字符串解释为commandlet。如果语句是exit 0
和exit 1
,会发生什么?0的退出代码通常被解释为成功,其他任何代码都是错误。i、 e.让我们确保PowerShell的运行按照您认为的方式运行。
"(&'c:\\Program Files\\telegraf\\telegraf.exe' --version) -like '*#{node['windows']['telegraf']['version']}*'"