# Путь к файлу 1CV8Clst.lst
$clusterFile = "C:\code\PowerShell\1c\1CV8Clst.lst"
if (-not (Test-Path $clusterFile)) {
Write-Error "Файл $clusterFile не найден!"
exit 1
}
$data = Get-Content -Path $clusterFile -Raw
# Функция для точного извлечения ClusterServer из начала файла
function Get-ClusterServer {
param ($content)
# Ищем конкретную структуру в начале файла с учетом дефиса в имени
$pattern = '{\s*0,[^{]+{[^}]+"[^"]*-\d*"[^}]*{[^}]*"([^"-]+-[^"]+)",\s*(\d+)'
$match = [regex]::Match($content, $pattern)
if ($match.Success) {
$server = $match.Groups[1].Value.Trim()
$port = $match.Groups[2].Value.Trim()
return "${server}:${port}"
}
else {
# Дополнительная попытка найти альтернативный формат
$altPattern = '{\s*0,[^{]+{[^}]+"([^"-]+-[^"]+)",\s*(\d+)'
$altMatch = [regex]::Match($content, $altPattern)
if ($altMatch.Success) {
$server = $altMatch.Groups[1].Value.Trim()
$port = $altMatch.Groups[2].Value.Trim()
return "${server}:${port}"
}
}
Write-Warning "Не удалось определить ClusterServer в файле"
return "Unknown:0"
}
$clusterServer = Get-ClusterServer -content $data
Write-Host "Определен ClusterServer: $clusterServer" -ForegroundColor Cyan
# Парсинг баз данных
$dbPattern = '\{[0-9a-f-]+,"[^"]+","[^"]+","[^"]+","[^"]+","[^"]+"[^}]*\}'
$dbMatches = [regex]::Matches($data, $dbPattern)
$result = @()
foreach ($match in $dbMatches) {
$block = $match.Value
$fields = $block -split ',' | ForEach-Object { $_.Trim('"{}') }
if ($fields.Count -ge 6) {
$dbName = $fields[2]
$dbmsType = $fields[3]
$sqlServer = $fields[4]
$dbNameInSql = $fields[5]
$connStringPart = $fields[8]
$dbsrvr = if ($connStringPart -match 'DBSrvr=([^;]+)') { $matches[1] } else { $sqlServer }
$result += [PSCustomObject]@{
BaseName = $dbName
DBMS = $dbmsType
SQLServer = $dbsrvr
DBNameInSQL = $dbNameInSql
ClusterServer = $clusterServer
}
}
}
# Вывод результатов
$result | Format-Table -AutoSize
# Экспорт в CSV
#$csvPath = Join-Path (Split-Path $clusterFile) "1C_Databases_Report_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
#$result | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8 -Force
#Write-Host "Отчет сохранен в $csvPath" -ForegroundColor Green