Импортировать измененные сценарием файлы .reg с помощью PowerShell? - PullRequest
3 голосов
/ 09 июня 2011

Мне нужно импортировать файл .reg, который содержит стандартные параметры конфигурации для серверного продукта. Однако возможно, что один блок Windows может содержать несколько экземпляров сервера. Каждый экземпляр сервера имеет свои ключи конфигурации в реестре Windows.

Первый экземпляр будет иметь раздел реестра по умолчанию:

HKLM\SOFTWARE\<Vendor>\<Product>\Settings

Любые другие экземпляры будут иметь имена вариантов, например:

HKLM\SOFTWARE\<Vendor>\<Product>\Settings-foo
HKLM\SOFTWARE\<Vendor>\<Product>\Settings-bar
HKLM\SOFTWARE\<Vendor>\<Product>\Settings-baz

и т.д ...

Файл реестра содержит параметры, которые необходимо применить к каждому из этих экземпляров сервера. Структура подразделов реестра одинакова для каждого ключа. Итак, процесс ручного развертывания состоит в том, чтобы взять файл .reg и выполнить поиск и замену файла для "SOFTWARE\<Vendor>\<Product>\Settings\" и заменить его на "SOFTWARE\<Vendor>\<Product>\Settings-foo\", а затем импортировать недавно настроенный файл .reg. Промыть и повторить для бара, баз и т.д.

Я хочу написать сценарий PowerShell, который получает список всех ключей «Settings-» и выполняет эквивалентный поиск и замену перед импортом файла .reg. Я не нашел командлет, который может импортировать файлы .reg, поэтому я должен вызывать reg.exe или regedit.exe. Обе эти программы позволяют импортировать содержимое файла .reg, который находится на диске.

У меня вопрос, нужно ли мне на самом деле создавать файлы .reg и записывать их на диск, чтобы я мог затем вызвать reg.exe /Import <filename> или regedit.exe /S <filename>? Или есть какой-то способ, которым я могу просто загрузить исходный файл .reg, изменить его в памяти и получить reg.exe или regedit.exe для импорта измененных ключей реестра без необходимости записывать весь стек файлов .reg на диск?

Ответы [ 3 ]

5 голосов
/ 09 июня 2011

Насколько я знаю, базовые командлеты PowerShell вообще не используют файл .reg.

Итак, с одной стороны, вы можете изменить ваши reg-файлы и применить их с помощью REG.EXE. С другой стороны, вы можете использовать поставщик реестра PowerShell и CMdlets «Item» для изменения реестра.

1 голос
/ 09 июня 2011

Вы можете создавать команды reg в памяти и выполнять их, не прибегая к временным файлам. То есть, создайте команды reg add следующим образом:

reg add \\reg-path /v value-name /f /t type-name /d value-data

, который будет добавлять или перезаписывать значение-имя-значения со значением-данными в качестве данных в путь реестра reg-path.

Создание таких команд в цикле Powershell не должно быть слишком сложным.

0 голосов
/ 09 октября 2013

Таким образом, вы можете сделать это двумя способами:

$Reg = get-itemproperty hkcu:\environtment\path #This will get all the keys in a path
$Reg.key1 = [int32]1
$Reg.key2 = [string]somevalue
set-item hkcu:\environment\path $Reg

ИЛИ

$Reg = @"
Windows Registry Editor 5.00

[HKEY_CURRENT_USER\environment\path]
"key1"=dword:00000001
"key2"="somevalue"
"@

$reg | Out-file registry.reg
regedit /s registry.reg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...