Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
厨师长:如果powershell guard声明的评估结果为真,则两个相互矛盾的not__Powershell_Chef Infra_Chef Recipe - Fatal编程技术网

厨师长:如果powershell guard声明的评估结果为真,则两个相互矛盾的not_

厨师长:如果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

所以我和chef一起工作,如果前提条件成立,我需要将一些资源链接在一起。我需要检查流程的版本是否符合我的要求,如果是这样做的话。我看到了奇怪的行为,并注意到我的警卫声明并没有像我预期的那样被回避。所以我做了这个测试

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']}*'"