我知道如何为用户和机器设置变量。 当我尝试添加到PATH时出现问题。目前我的代码将覆盖PATH中的内容。
execute 'set java_home2' do
command "setx -m PATH2 \"D:\\Home"
*only_if {"PATH2" == " "}*
end
这当前确保PATH仅在没有PATH时运行。当删除only_if时,会出现覆盖问题。
编辑: 我现在能够修改系统变量,但无法弄清楚如何对用户变量
进行相同的操作env 'path addition' do
key_name "PATH"
value (ENV["PATH"] + ";D:\\Home\\Apps\\variable")
:modify
end
答案 0 :(得分:1)
从问题来看,您似乎正在尝试在Windows服务器上添加PATH。在这种情况下,您可以使用名为windows_path
的{{1}}食谱资源进行此类操作:
windows_path 'C:\Sysinternals' do
action :add
end
答案 1 :(得分:0)
我不能在chef中说明具体内容,但在ruby中,您可以使用ENV
哈希访问环境变量。因此,对于PATH
,您可以执行以下操作:
ENV["PATH"] = ENV["PATH"].split(":").push("/my/new/path").join(":")
这将在程序执行期间更新PATH。请记住:
PATH
,并且只会暂时更新。永久更改PATH
更复杂,并且依赖于操作系统。PATH
分隔符为;
而不是:
,因此您应该相应地更新代码。 答案 2 :(得分:0)
我找到了答案:
#Append notepad to user PATH variable
registry_key "HKEY_CURRENT_USER\\Environment" do
$path_name = ""
subkey_array = registry_get_values("HKEY_CURRENT_USER\\Environment", :x86_64)
subkey_array.each{ |val|
case val[:name].include?("PATH")
when true
$path_name = val[:data]
print "\n The User PATH is: #{$path_name}"
break
when false
print ':'
end
}
values [{
:name => "PATH",
:type => :string,
:data => "#{$path_name};D:\\Home\\Apps\\Notepad++\\Notepad++"
}]
action :create
#add a guard to prevent duplicates
not_if {
$path_name.include?("D:\\Home\\Apps\\Notepad++\\Notepad++")
}
end
此代码从CMD行运行时将打印当前用户PATH变量,然后它将附加D:/ Home / Apps / Notepad ++ / Notepad ++如果它当前不在PATH中。如果它已经存在,那么这将被跳过。