У меня есть файл configuration.txt, который мой скрипт использует для заполнения переменных в моем скрипте. Текстовый файл выглядит следующим образом:
Setting1= Yes
Setting2= Yes
Setting3= Yes
Затем я заполняю свои переменные как таковые (чтобы просто нажать Да или Нет):
$Setting1=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting1='})
$Setting1=($Setting1 -Split '=', 2)[1].trim()
$Setting2=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting2='})
$Setting2=($Setting2 -Split '=', 2)[1].trim()
$Setting3=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting3='})
$Setting3=($Setting3 -Split '=', 2)[1].trim()
Тогда у меня есть некоторая логика, и если пользователь,с помощью подсказок в моем скрипте измените эти настройки, скрипт обновит текстовый файл следующим кодом:
((Get-Content -Path .\configuration.txt -Raw | Where-Object {$_ -match 'Setting1'}) -replace $Setting1, $UserSetting1) | Set-Content -Path .\configuration.txt
Где $ UserSetting1 - ввод пользователя («да» или «нет»).
Теперь то, что это делает, это изменяет каждое «да» или «нет» в файле конфигурации вместо того, чтобы только менять «да» или «нет» в конкретной строке. Я пытаюсь использовать функцию соответствия, чтобы вытащить.
Другими словами, если пользователь хочет изменить настройку 1 на «нет» и оставить настройки 2 и 3 как «да»;сценарий меняет все настройки на Да, а не только на настройку 1.
У меня сложилось впечатление, что я должен использовать -Raw для выполнения -relace, но, как указано выше, кажется, чтоФункция -match не работает с функцией -Raw ... и если я не использую -raw, то мой файл конфигурации будет перезаписан только с одной строкой, которую я сопоставил.