Подготовка конфигурационного пакета¶
Ссылка на конфигурационный пакет: https://cloud.ldm.ru/index.php/s/EFpeAEQmG28oHw9
Предварительно необходимо заменить имена в URL при переносе конфигураций.
Важно! Нужные конфигурации уже выгружены и архив с конфигурациями сохранен на ПК.
Для того чтобы при переносе конфигурации со стенда на стенд заменить имена всех URL, необходимо выполнить следующие действия:
- Сохранить и распаковать конфигурационные файлы.
2. Создать каталог, в котором будет расположен файл со скриптом для замены.
3. Открыть Windows PowerShell и перейти в каталог, где будет расположен файл со скриптом, выполнив команду:
cd C:\Scripts
4. Создать файл скрипта в нужном каталоге (после отработки может поступить запрос на подтверждение действий, в этом случае необходимо нажать клавишу [Enter]):
Создание скрипта
$scriptContent = @'
param(
[string]$folderPath,
[string]$searchValue,
[string]$replaceValue
)
if (-not $folderPath -or -not $searchValue) {
Write-Host "Использование: .\replace-in-archives.ps1 -folderPath 'C:\путь' -searchValue 'старое' -replaceValue 'новое'"
exit 1
}
Write-Host "Начинаем обработку архивов в папке: $folderPath" -ForegroundColor Cyan
Write-Host "Замена: '$searchValue' -> '$replaceValue'" -ForegroundColor Yellow
$archives = Get-ChildItem -Path $folderPath -Filter *.zip
Write-Host "Найдено архивов: $($archives.Count)" -ForegroundColor Cyan
foreach ($archive in $archives) {
Write-Host "`nОбработка архива: $($archive.Name)" -ForegroundColor Green
$tempDir = Join-Path $env:TEMP ([Guid]::NewGuid().ToString())
Write-Host " Временная папка: $tempDir"
New-Item -ItemType Directory -Path $tempDir | Out-Null
Write-Host " Распаковка..."
Expand-Archive -Path $archive.FullName -DestinationPath $tempDir -Force
$jsonFiles = Get-ChildItem -Path $tempDir -Filter *.json -Recurse
Write-Host " Найдено JSON файлов: $($jsonFiles.Count)"
$replacementCount = 0
foreach ($file in $jsonFiles) {
$content = Get-Content $file.FullName -Raw -Encoding UTF8
$newContent = $content -replace [regex]::Escape($searchValue), $replaceValue
if ($content -ne $newContent) {
$replacementCount += ([regex]::Matches($content, [regex]::Escape($searchValue))).Count
Set-Content -Path $file.FullName -Value $newContent -Encoding UTF8
}
}
$newArchivePath = $archive.FullName -replace '\.zip$', '_modified.zip'
Write-Host " Создание нового архива: $([System.IO.Path]::GetFileName($newArchivePath))"
Compress-Archive -Path "$tempDir\*" -DestinationPath $newArchivePath -Force
Write-Host " Выполнено замен: $replacementCount" -ForegroundColor Magenta
Remove-Item -Path $tempDir -Recurse -Force
}
Write-Host "`nОбработка завершена!" -ForegroundColor Green
'@
Set-Content -Path "replace-in-archives.ps1" -Value $scriptContent -Encoding UTF8
5. Перейти в каталог «C:\Scripts» и убедиться, что появился файл «replace-in-archives.ps1».
6. Выполнить в Windows PowerShell команду:
.\replace-in-archives.ps1 -folderPath "C:\Бэкап\dh-facade-service" -searchValue "https://example.com" -replaceValue "https://example2.com"
где:
- "C:Бэкап\dh-facade-service" – путь до папки с архивами конфигураций сервиса dh-facade-service;
- -searchValue "https://example.com" – значение, которое нужно найти;
- -replaceValue "https://example2.com" – значение, на которое нужно заменить.
7. На экране отобразится процесс замены.
8. После завершения замены будут созданы копии архивов с замененными данными (префикс архивов _modified).
Далее рекомендуется выполнить проверку и поиск по архивам с префиксом _modified на старые и новые значения. Для этого необходимо выполнить следующие действия:
- Выполнить в Windows PowerShell команды (может потребоваться дополнительно нажать клавишу [Enter]):
Проверка на старые и новые значения
$path="C:\Бэкап\dh-facade-service"
$old="https://example.com"
$new="https://example2.com"
# Находим все архивы с префиксом _modified
$archivesToCheck = (Get-ChildItem -Path $path -Filter "*_modified.zip").BaseName -replace 'dh-facade-service-|_modified', ''
Write-Host "Найдено архивов для проверки: $($archivesToCheck.Count)" -ForegroundColor Magenta
foreach ($num in $archivesToCheck) {
$archiveName = "dh-facade-service-${num}_modified.zip"
$archivePath = Join-Path $path $archiveName
Write-Host "`n=== Проверка $archiveName ===" -ForegroundColor Cyan
$tempDir = "$env:TEMP\check_$num"
if (Test-Path $tempDir) { Remove-Item $tempDir -Recurse -Force }
New-Item -ItemType Directory -Path $tempDir | Out-Null
# Распаковываем
Expand-Archive -Path $archivePath -DestinationPath $tempDir -Force
# Считаем JSON файлы
$jsonFiles = Get-ChildItem -Path $tempDir -Filter *.json -Recurse
Write-Host "Найдено JSON файлов: $($jsonFiles.Count)"
# Ищем значения в каждом файле отдельно
$totalOld = 0
$totalNew = 0
$filesWithOld = 0
$filesWithNew = 0
foreach ($file in $jsonFiles) {
$content = Get-Content $file.FullName -Raw
# Проверяем наличие значений
$hasOld = $content -match ([regex]::Escape($old))
$hasNew = $content -match ([regex]::Escape($new))
if ($hasOld) {
$filesWithOld++
# Считаем точное количество вхождений
$oldCount = [regex]::Matches($content, [regex]::Escape($old)).Count
$totalOld += $oldCount
Write-Host " ❌ Файл: $(Split-Path $file.FullName -Leaf) содержит старое значение ($oldCount раз)" -ForegroundColor Red
}
if ($hasNew) {
$filesWithNew++
$newCount = [regex]::Matches($content, [regex]::Escape($new)).Count
$totalNew += $newCount
}
}
Write-Host "Результаты:" -ForegroundColor Yellow
Write-Host " Файлов со старым значением: $filesWithOld" -ForegroundColor $(if($filesWithOld -gt 0){"Red"}else{"Green"})
Write-Host " Файлов с новым значением: $filesWithNew" -ForegroundColor $(if($filesWithNew -gt 0){"Green"}else{"Yellow"})
Write-Host " Всего старых значений: $totalOld" -ForegroundColor $(if($totalOld -gt 0){"Red"}else{"Green"})
Write-Host " Всего новых значений: $totalNew" -ForegroundColor $(if($totalNew -gt 0){"Green"}else{"Yellow"})
# Покажем пример содержимого из первого файла
if ($jsonFiles.Count -gt 0) {
$sampleFile = $jsonFiles[0]
Write-Host "`nПример из файла: $(Split-Path $sampleFile.FullName -Leaf)" -ForegroundColor Gray
$sampleContent = Get-Content $sampleFile.FullName -First 5
Write-Host $sampleContent -ForegroundColor DarkGray
}
# Очистка
Remove-Item -Path $tempDir -Recurse -Force
}
где:
- $path – путь до папки;
- $old – старые значения;
- $new – новые значения.
2. На экране отобразится информация, изображенная на рисунке ниже.
3. По результатам замены и итоговой проверки будет понятно, что в тех архивах, где выполнялась замена, теперь есть файлы с новым значением и отсутствуют со старым значением.
Далее нужно удалить старые архивы и выполнить безопасный скрипт.
Удаление старых архивов
$path="C:\Бэкап\dh-facade-service"
# Посмотрим что будет удалено
Get-ChildItem -Path $path -Filter "dh-facade-service-*.zip" |
Where-Object { $_.Name -notlike "*_modified.zip" } |
Select-Object Name, Length, LastWriteTime
# Удаляем (если уверены)
Get-ChildItem -Path $path -Filter "dh-facade-service-*.zip" |
Where-Object { $_.Name -notlike "*_modified.zip" } |
Remove-Item -Force -WhatIf # Сначала с -WhatIf для проверки
# Без -WhatIf для реального удаления
# Remove-Item -Force
где $path – путь до папки с архивами.
Данный скрипт выделяет цветом удаленные архивы.
Убедившись, что процесс выполняется корректно и «лишних» файлов нет, необходимо в строке Remove-Item -Force –WhatIf убрать -WhatIf и еще раз выполнить скрипт.
Убедиться, что в папке с конфигурационными файлами пропали изначальные архивы и остались только с префиксом _modified.
Далее необходимо переименовать оставшиеся архивы и убрать префикс _modified – сначала с преефиксом –WhatIf, чтобы не удалить лишнего, а затем убрать –WhatIf.
Удаление префикса _modified
$path="C:\Бэкап\dh-facade-service"
Get-ChildItem -Path $path -Filter "*_modified.zip" | ForEach-Object {
$newName = $_.Name -replace '_modified', ''
Rename-Item -Path $_.FullName -NewName $newName -WhatIf
}
После выполнения всех действий необходимо сохранить результаты в ZIP-архив.



