Мой исходный файл конфигурации (web1.config) не имеет дополнительной строки и при просмотре в блокноте (показывает все символы) выглядит следующим образом:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
</system.web>
<appSettings>
<add key="myConnectionString" value="server=localhost;database=myDb;uid=myUser;password=myPass;" />
</appSettings>
</configuration>
Теперь мне нужно применить скрипт, чтобы изменить имя моей базы данных на что-то похожее на:
Move-Item "web1.config" "webtemp.config"
Get-Content "webtemp.config" | ForEach-Object {$_ -replace "database=myDb;", "database=newDb;"} |Set-Content "web1.config" -Force
Remove-Item "webtemp.config"
Write-Output('Settings Changed')
Итак, новый сгенерированный файл (web1.config) выглядит так:
Обратите внимание на дополнительную строку, добавленную в конце файла (которая совершенно не нужна). Я попробовал все другие варианты, такие как: - использование api вне файла - использование метода .net IO System.IO.StreamWriter - использование флага -nonewline ( он преобразует все 10 строк в одну строку) - используя разные параметры кодирования - попытался заменить \r\n на\r (не работает, так как снова set-content всегда генерирует crlf)
Я использую PowerShell v5.1.