Элегантный способ установки переменных в файлах .ini

1509
comp.sci.intern

В настоящее время я пытаюсь выполнить сценарий установки Microsoft Sql Server 2012, и у меня возникла проблема с возможностью установки пользователем параметров для процесса установки в моем сценарии powershell.

Поскольку параметры сервера SQL установлены в INI-файле, я не уверен, как лучше всего отредактировать указанный INI-файл. Я мог видеть себя

  • Копирование всего INI-файла в PowerShell и установка переменных в кавычках, чтобы записать его позже, или
  • Сохранение INI-файла отдельно и поиск каждой строки Мне нужно установить переменные в виде строки для редактирования отдельно.

Есть ли более элегантный способ работы с файлами .ini, чем этот? Есть ли какой-нибудь модуль PowerShell "найти и заменить" для файлов, которые я мог бы использовать?

1
Вероятно, лучше всего переписать весь INI-файл из переменной «in-script», содержащей ваш шаблон, потому что тогда вы можете гарантировать, что контент будет таким, каким он вам нужен (плюс значения, заданные пользователем) ... Kinnectus 6 лет назад 0
"Есть ли какой-нибудь модуль" найти и заменить "PowerShell для файлов, которые я мог бы использовать?" INI-файлы - это просто текст, любая из стандартных команд PS поиска и замены будет работать на одной из них. Загрузите файл в память, найдите и замените, сбросьте обратно в файл. Ƭᴇcʜιᴇ007 6 лет назад 0

1 ответ на вопрос

1
root

Рассматривайте .ini как текстовый файл. Скажем, у нас есть следующие .ini:

[section1] var1=foo1 [section2] var2=foo2 var3=foo3 

Чтобы изменить значение, присвоенное «var2», мы можем сделать:

(get-content .\test.ini).Replace('foo2','bar2') | Set-Content .\test.ini 

Где "bar2" - это пользовательское значение. Чтобы включить определенное пользователем значение, вы можете сделать:

$ini = ".\test.ini" $userInput = Read-Host -Prompt "Enter a new value for var2" (get-content $ini).Replace('foo2',$userInput) | Set-Content $ini 

То, как вы выберете способ обработки замены, будет зависеть от данных в вашем конкретном файле.

Это слишком просто, что если в `= foo2` есть несколько записей, вам также нужно указать значение-имя. Что если в разных разделах есть повторяющиеся имена-значений? Peter Hahndorf 6 лет назад 0