Ресурс registry_key
Эта страница сгенерирована из исходного кода Chef. Чтобы предложить изменение, отредактируйте файл registry_key.rb и отправьте запрос на вытягивание в репозиторий Chef.
Используйте ресурс registry_key для создания и удаления ключей реестра в Microsoft Windows.
Примечание
64-разрядные версии Microsoft Windows имеют 32-разрядный совместимый слой в реестре, который отображает и перенаправляет определенные ключи (и их значения) в определенные места (или логические представления) раздела реестра.
Chef Infra Client может получить доступ к любому отображенному или перенаправленному ключу реестра. Архитектура машины, на которой работает Chef Infra Client, используется в качестве значения по умолчанию (без перенаправления). Доступ к местоположению SysWow64 должен быть указан. Как правило, это необходимо только для обеспечения совместимости с 32-разрядными приложениями, работающими на 64-разрядной операционной системе.
32-разрядные версии Chef Infra Client (12.8 и ранее) и 64-разрядные версии Chef Infra Client (12.9 и позже) обычно ведут себя одинаково в этой ситуации, за исключением одного момента: чтение и запись из перенаправленного местоположения реестра возможны только с помощью версии chef-client 12.9 (и новее).
Для получения дополнительной информации см.: Отображение реестра.
Синтаксис
Блок ресурса registry_key создает и удаляет ключи реестра в Microsoft Windows:
registry_key 'HKEY_LOCAL_MACHINE\\...\\System' do
values [{
name: 'NewRegistryKeyValue',
type: :multi_string,
data: %w(foo bar baz),
}]
action :create
end
Используйте несколько записей ключа реестра со значениями ключей, основанными на атрибутах узла:
registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\name_of_registry_key' do
values [{name: 'key_name', type: :string, data: 'C:\Windows\System32\file_name.bmp'},
{name: 'key_name', type: :string, data: node['node_name']['attribute']['value']},
{name: 'key_name', type: :string, data: node['node_name']['attribute']['value']}
]
action :create
end
Ресурс registry_key имеет следующий синтаксис:
registry_key 'name' do
architecture Symbol # default value: :machine
key String # default value: 'name' unless specified
recursive true, false # default value: false
values
action Symbol # defaults to :create if not specified
end
где:
-
registry_key— ресурс -
name— имя блока ресурса -
values— хеш, содержащий как минимум один ключ реестра, который должен быть создан или удален. Каждый ключ реестра в хеше сгруппирован в скобки, в которых указаныname:,type:, иdata:значения для этого ключа реестра. -
type:— доступные значения для ключей реестра в Microsoft Windows. Используйте:binaryдля REG_BINARY,:stringдля REG_SZ,:multi_stringдля REG_MULTI_SZ,:expand_stringдля REG_EXPAND_SZ,:dwordдля REG_DWORD,:dword_big_endianдля REG_DWORD_BIG_ENDIAN или:qwordдля REG_QWORD. {{< warning >}}:multi_stringдолжно быть массивом, даже если существует только одна строка. {{< /warning >}} -
action— определяет действия, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние -
architecture,key,recursiveиvalues— свойства этого ресурса с указанным типом Ruby. Более подробную информацию обо всех свойствах, которые могут быть использованы с этим ресурсом, см. в разделе «Свойства» ниже.
Разделители путей ключей реестра
Ключ реестра Microsoft Windows может быть использован как строка в коде Ruby, например, когда ключ реестра используется в качестве имени рецепта. В Ruby, когда ключ реестра заключён в двойные кавычки (" "), тот же символ обратного слэша (\), который используется для определения разделителя пути ключа реестра, также используется в Ruby для определения символа экранирования. Поэтому разделители путей ключей реестра должны быть экранированы, когда они заключены в двойные кавычки. Например, следующий ключ реестра:
HKCU\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Themes
может быть заключён в одинарные кавычки с одним обратным слэшем:
'HKCU\SOFTWARE\path\to\key\Themes'
или может быть заключён в двойные кавычки с дополнительным обратным слэшем в качестве символа экранирования:
"HKCU\\SOFTWARE\\path\\to\\key\\Themes"
Методы Recipe DSL
Шесть методов присутствуют в Recipe DSL для проверки реестра во время выполнения Chef Infra Client на платформе Microsoft Windows —registry_data_exists?, registry_get_subkeys, registry_get_values, registry_has_subkeys?, registry_key_exists?, и registry_value_exists? — эти помощники гарантируют идемпотентность ресурса powershell_script.
registry_data_exists?
Используйте метод registry_data_exists? для проверки наличия в ключе реестра Microsoft Windows указанных данных указанного типа в значении.
Примечание
Этот метод может быть использован в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если требуется изменение ключа реестра, используйте ресурс registry_key.
Синтаксис метода registry_data_exists? выглядит следующим образом:
registry_data_exists?(
KEY_PATH,
{ name: 'NAME', type: TYPE, data: DATA },
ARCHITECTURE
)
где:
-
KEY_PATH— путь к значению ключа реестра. Путь должен включать раздел реестра, который может быть указан либо полным именем, либо сокращением из 3 или 4 букв. Например, какHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITY— оба валидные и эквивалентные. Допустимые разделы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU. -
{ name: 'NAME', type: TYPE, data: DATA }— хеш, содержащий ожидаемое имя, тип и данные значения ключа реестра -
type:— доступные значения для ключей реестра в Microsoft Windows. Используйте:binaryдля REG_BINARY,:stringдля REG_SZ,:multi_stringдля REG_MULTI_SZ,:expand_stringдля REG_EXPAND_SZ,:dwordдля REG_DWORD,:dword_big_endianдля REG_DWORD_BIG_ENDIAN или:qwordдля REG_QWORD. -
ARCHITECTURE— одно из следующих значений::x86_64,:i386, или:machine. Установите в:i386для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите в:x86_64для принудительной записи в 64-разрядное местоположение реестра, однако Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине. Установите в:machineдля того, чтобы Chef Infra Client мог использовать соответствующее местоположение ключа на основе архитектуры вашего узла. Значение по умолчанию::machine.
Этот метод вернет true или false.
-
KEY_PATH— путь к ключу реестра. Путь должен включать раздел реестра, который может быть указан либо его полным именем, либо сокращением из 3 или 4 букв. Например, иHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITYявляются допустимыми и эквивалентными. Следующие разделы реестра допустимы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU. -
ARCHITECTURE— одно из следующих значений::x86_64,:i386, или:machine. Установите в:i386, чтобы читать или записывать 32-разрядные ключи реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите в:x86_64, чтобы принудительно записать в 64-разрядное местоположение реестра, однако Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине. Установите в:machine, чтобы разрешить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию::machine.
Это возвращает массив значений ключа реестра.
registry_has_subkeys?
Используйте метод registry_has_subkeys?, чтобы узнать, имеет ли ключ реестра Microsoft Windows одно (или несколько) значение.
Примечание
Этот метод может быть использован в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра должен быть изменен, используйте ресурс registry_key.
Синтаксис метода registry_has_subkeys? следующий:
registry_has_subkeys?(KEY_PATH, ARCHITECTURE)
где:
-
KEY_PATH— путь к ключу реестра. Путь должен включать раздел реестра, который может быть указан либо его полным именем, либо сокращением из 3 или 4 букв. Например, иHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITYявляются допустимыми и эквивалентными. Следующие разделы реестра допустимы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU. -
ARCHITECTURE— одно из следующих значений::x86_64,:i386, или:machine. Установите в:i386, чтобы читать или записывать 32-разрядные ключи реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите в:x86_64, чтобы принудительно записать в 64-разрядное местоположение реестра, однако Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине. Установите в:machine, чтобы разрешить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию::machine.
Этот метод вернет true или false.
registry_key_exists?
Используйте метод registry_key_exists?, чтобы узнать, существует ли ключ реестра Microsoft Windows по указанному пути.
Примечание
Этот метод может быть использован в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра должен быть изменен, используйте ресурс registry_key.
Синтаксис метода registry_key_exists? следующий:
registry_key_exists?(KEY_PATH, ARCHITECTURE)
где:
-
KEY_PATH— путь к ключу реестра. Путь должен включать раздел реестра, который может быть указан либо его полным именем, либо сокращением из 3 или 4 букв. Например, иHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITYявляются допустимыми и эквивалентными. Следующие разделы реестра допустимы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU. -
ARCHITECTURE— одно из следующих значений::x86_64,:i386, или:machine. Установите в:i386, чтобы читать или записывать 32-разрядные ключи реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите в:x86_64, чтобы принудительно записать в 64-разрядное местоположение реестра, однако Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине. Установите в:machine, чтобы разрешить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию::machine.
Этот метод вернет true или false. (Любые значения реестра, связанные с этим ключом реестра, игнорируются.)
registry_value_exists?
Используйте метод registry_value_exists? для определения того, существует ли значение ключа реестра. Используйте registry_data_exists? для проверки типа и данных значения ключа реестра.
Примечание
Этот метод может быть использован в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра должен быть изменен, используйте ресурс registry_key.
Синтаксис метода registry_dvalue_exists? следующий:
registry_value_exists?(
KEY_PATH,
{ name: 'NAME' },
ARCHITECTURE
)
где:
-
KEY_PATH— путь к ключу реестра. Путь должен включать раздел реестра, который может быть указан либо его полным именем, либо сокращением из 3 или 4 букв. Например, иHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITYявляются допустимыми и эквивалентными. Следующие разделы реестра допустимы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU. -
{ name: 'NAME' }— хеш, содержащий имя значения ключа реестра; еслиtype:или:valueуказаны в хеше, они игнорируются. -
type:представляет значения, доступные для ключей реестра в Microsoft Windows. Используйте:binaryдля REG_BINARY,:stringдля REG_SZ,:multi_stringдля REG_MULTI_SZ,:expand_stringдля REG_EXPAND_SZ,:dwordдля REG_DWORD,:dword_big_endianдля REG_DWORD_BIG_ENDIAN или:qwordдля REG_QWORD. -
ARCHITECTURE— одно из следующих значений::x86_64,:i386, или:machine. Установите в:i386, чтобы читать или записывать 32-разрядные ключи реестра на 64-разрядных машинах под управлением Microsoft Windows. Установите в:x86_64, чтобы принудительно записать в 64-разрядное местоположение реестра, однако Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине. Установите в:machine, чтобы разрешить Chef Infra Client использовать соответствующее расположение ключа на основе архитектуры узла. Значение по умолчанию::machine.
Этот метод вернет true или false.
Действия
Ресурс registry_key имеет следующие действия:
:create- По умолчанию. Создать ключ реестра. Если ключ реестра уже существует (но не соответствует), обновить этот ключ реестра для соответствия.
:create_if_missing- Создать ключ реестра, если он не существует. Также создать значение ключа реестра, если оно не существует.
:delete- Удалить указанные значения для ключа реестра.
:delete_key- Удалить указанный ключ реестра и все его подключа. Действие
:delete_keyс атрибутомrecursiveудалит ключ реестра, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить в Chef Infra Client. :nothing- Этот блок ресурсов не выполняет действий, пока не получит уведомление от другого ресурса. После получения уведомления, этот блок ресурсов либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
Свойства
Ресурс registry_key имеет следующие свойства:
architecture-
Тип Ruby: Символ | Значение по умолчанию:
:machineРазрешенные значения::i386, :machine, :x86_64Архитектура узла, для которого будут созданы или удалены ключи. Возможные значения:
:i386(для узлов с 32-разрядным реестром),:x86_64(для узлов с 64-разрядным реестром) и:machine(для определения архитектуры Chef Infra Client во время выполнения Chef Infra Client).Для чтения или записи 32-разрядных ключей реестра на 64-разрядных машинах под управлением Microsoft Windows свойство
architectureдолжно быть установлено в значение:i386. Значение:x86_64может быть использовано для принудительной записи в 64-разрядное расположение реестра, но это значение менее полезно, чем значение по умолчанию (:machine) из-за того, что Chef Infra Client возвращает исключение, если:x86_64используется на 32-разрядной машине (в то время как с:machine, Chef Infra Client может получить доступ к ключу реестра на 32-разрядной машине).
key-
Тип Ruby: Строка | Значение по умолчанию:
The resource block's nameПуть к расположению, в котором должен быть создан ключ реестра или из которого должен быть удален ключ реестра. Значение по умолчанию:
nameблока ресурса. См. раздел «Синтаксис» выше для получения дополнительной информации. Путь должен включать раздел реестра, который может быть указан либо его полным именем, либо сокращением из 3 или 4 букв. Например, иHKLM\SECURITYиHKEY_LOCAL_MACHINE\SECURITYявляются допустимыми и эквивалентными. Следующие разделы реестра допустимы:HKEY_LOCAL_MACHINE,HKLM,HKEY_CURRENT_CONFIG,HKCC,HKEY_CLASSES_ROOT,HKCR,HKEY_USERS,HKU,HKEY_CURRENT_USER, иHKCU.
recursive-
Тип Ruby: true, false | Значение по умолчанию:
falseПри создании ключа это значение указывает на необходимость создания требуемых ключей для указанного пути. При использовании действия
:delete_keyв рецепте, и если у реестрового ключа есть подключаемые ключи, необходимо установить значение этого свойства вtrue. Действие:delete_keyс атрибутомrecursiveудалит реестровый ключ, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить с помощью Chef Infra Client.
values-
Тип Ruby: Hash, Array
Массив хэшей, где каждый хэш содержит значения, которые должны быть установлены под реестровым ключом. Каждый хэш должен содержать
name:,type:, иdata:(и не должен содержать другие значения ключей).type:представляет значения, доступные для реестровых ключей в Microsoft Windows. Используйте:binaryдля REG_BINARY,:stringдля REG_SZ,:multi_stringдля REG_MULTI_SZ,:expand_stringдля REG_EXPAND_SZ,:dwordдля REG_DWORD,:dword_big_endianдля REG_DWORD_BIG_ENDIAN или:qwordдля REG_QWORD.Предупреждение
:multi_stringдолжен быть массивом, даже если существует только одна строка.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса registry_key в рецептах:
Создание реестрового ключа
Используйте строку в двойных кавычках:
registry_key "HKEY_LOCAL_MACHINE\\path-to-key\\Policies\\System" do
values [{
name: 'EnableLUA',
type: :dword,
data: 0
}]
action :create
end
или строку в одинарных кавычках:
registry_key 'HKEY_LOCAL_MACHINE\path-to-key\Policies\System' do
values [{
name: 'EnableLUA',
type: :dword,
data: 0
}]
action :create
end
Удаление значения реестрового ключа
Используйте строку в двойных кавычках:
registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\path\\to\\key\\AU" do
values [{
name: 'NoAutoRebootWithLoggedOnUsers',
type: :dword,
data: ''
}]
action :delete
end
или строку в одинарных кавычках:
registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\path\to\key\AU' do
values [{
name: 'NoAutoRebootWithLoggedOnUsers',
type: :dword,
data: ''
}]
action :delete
end
Примечание
Если data: не указано, появляется ошибка: Missing data key in RegistryKey values hash
Удаление реестрового ключа и его подключаемых ключей рекурсивно
Используйте строку в двойных кавычках:
registry_key "HKCU\\SOFTWARE\\Policies\\path\\to\\key\\Themes" do
recursive true
action :delete_key
end
или строку в одинарных кавычках:
registry_key 'HKCU\SOFTWARE\Policies\path\to\key\Themes' do
recursive true
action :delete_key
end
Примечание
Будьте осторожны при использовании действия :delete_key с атрибутом recursive. Это действие удалит реестровый ключ, все его значения и все имена, типы и данные, связанные с ними. Это действие невозможно отменить с помощью Chef Infra Client.
Использование перенаправленных ключей
В 64-разрядных версиях Microsoft Windows, HKEY_LOCAL_MACHINE\SOFTWARE\Example — это перенаправленный ключ. В следующих примерах, так как HKEY_LOCAL_MACHINE\SOFTWARE\Example — это 32-разрядный ключ, вывод будет «Найден 32-разрядный ключ», если они будут выполнены на 64-разрядной версии Microsoft Windows:
registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\Example" do
architecture :i386
recursive true
action :create
end
или:
registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\Example" do
architecture :x86_64
recursive true
action :delete_key
end
или:
ruby_block 'check 32-bit' do
block do
puts 'Found 32-bit key'
end
only_if {
registry_key_exists?("HKEY_LOCAL_MACHINE\SOFTWARE\\Example",
:i386)
}
end
или:
ruby_block 'check 64-bit' do
block do
puts 'Found 64-bit key'
end
only_if {
registry_key_exists?("HKEY_LOCAL_MACHINE\\SOFTWARE\\Example",
:x86_64)
}
end
Установка параметров прокси, идентичных используемым Chef Infra Client
Используйте строку в двойных кавычках:
proxy = URI.parse(Chef::Config[:http_proxy])
registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
{name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
{name: 'ProxyOverride', type: :reg_string, data: <local>},
]
action :create
end
или строку в одинарных кавычках:
proxy = URI.parse(Chef::Config[:http_proxy])
registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
{name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
{name: 'ProxyOverride', type: :reg_string, data: <local>},
]
action :create
end
Установка имени реестрового ключа в “(Default)”
Используйте строку в двойных кавычках:
registry_key 'Set (Default) value' do
key "HKLM\\Software\\Test\\Key\\Path"
values [
{name: '', type: :string, data: 'test'},
]
action :create
end
или строку в одинарных кавычках:
registry_key 'Set (Default) value' do
key 'HKLM\Software\Test\Key\Path'
values [
{name: '', type: :string, data: 'test'},
]
action :create
end
где name: '' содержит пустую строку, которая установит имя реестрового ключа в (Default).
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/registry_key/