Ресурс registry_key
Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменение, отредактируйте файл registry_key.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс registry_key для создания и удаления ключей реестра в Microsoft Windows.
Примечание
64-битные версии Microsoft Windows имеют 32-битную совместимую оболочку в реестре, которая отражает и перенаправляет определенные ключи (и их значения) в конкретные места (или логические представления) в реестре.
Chef Infra Client может получить доступ к любому отраженному или перенаправленному ключу реестра. Архитектура машины, на которой работает Chef Infra Client, используется в качестве значения по умолчанию (без перенаправления). Доступ к расположению SysWow64 должен быть указан при перенаправлении. Обычно это необходимо только для обеспечения совместимости с 32-битными приложениями, работающими на 64-битной операционной системе.
Дополнительную информацию см. в статье: Отражение реестра.
Синтаксис
Блок ресурса 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.Предупреждение
:multi_stringдолжен быть массивом, даже если существует только одна строка. -
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"
Методы языка Chef Infra
Шесть методов присутствуют в языке Chef Infra для проверки реестра во время выполнения 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— путь к значению ключа реестра. Путь должен включать в себя реестр, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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.
registry_get_subkeys
Используйте метод registry_get_subkeys для получения списка значений ключей реестра, присутствующих для ключа реестра Microsoft Windows.
Примечание
Этот метод можно использовать в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра необходимо изменить, используйте ресурс registry_key.
Синтаксис метода registry_get_subkeys следующий:
subkey_array = registry_get_subkeys(KEY_PATH, ARCHITECTURE)
где:
-
KEY_PATH— путь к ключу реестра. Путь должен включать в себя реестр, который можно указать либо полным именем, либо трех- или четырехбуквенным сокращением. Например, оба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_get_values
Используйте метод registry_get_values для получения значений ключа реестра (имя, тип и данные) для ключа реестра Microsoft Windows.
Примечание
Этот метод можно использовать в рецептах и внутри блоков not_if и only_if в ресурсах. Этот метод не предназначен для создания или изменения ключа реестра. Если ключ реестра необходимо изменить, используйте ресурс registry_key.
Синтаксис метода registry_get_values следующий:
subkey_array = registry_get_values(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.
Это возвращает массив значений ключей реестра.
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 во время выполнения).Чтобы читать или писать 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/