Загрузка данных


[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Set-Location $PSScriptRoot

$csvPath = "data.csv"
$downloadDir = "downloads"
$baseUrl = "https://main.atb.su/normdocs/Lists/Docs/ByCategory.aspx"
$baseDomain = "https://main.atb.su"

if (!(Test-Path $downloadDir)) { New-Item -ItemType Directory -Path $downloadDir }

# Читаем CSV (пробуем кодировку Default, если UTF8 не подхватит русские буквы)
$data = Import-Csv -Path $csvPath -Delimiter ";" -Encoding Default

foreach ($row in $data) {
    $title = $row."Название"
    if (-not $title) { continue }

    # Убираем лишние пробелы в начале и конце
    $title = $title.Trim()

    Write-Host "`nПоиск: $title" -ForegroundColor Cyan

    # Ищем ТОЛЬКО по названию (FilterField1), так шанс найти документ выше
    $escTitle = [uri]::EscapeDataString($title)
    $searchUrl = "$baseUrl?FilterField1=Title&FilterValue1=$escTitle"

    try {
        $page = Invoke-WebRequest -Uri $searchUrl -UseDefaultCredentials -TimeoutSec 20
        
        # Регулярка для поиска ссылки на вложение (Attachments)
        if ($page.Content -match 'href="([^"]*?Attachments/[^"]+)"') {
            $fileUrl = "$baseDomain$($matches[1])"
            
            # Декодируем имя файла для сохранения
            $rawFileName = $fileUrl.Split('/')[-1]
            $fileName = [System.Web.HttpUtility]::UrlDecode($rawFileName)
            $savePath = Join-Path $downloadDir $fileName

            Write-Host "  [+] Найдено! Скачиваю: $fileName" -ForegroundColor Green
            Invoke-WebRequest -Uri $fileUrl -OutFile $savePath -UseDefaultCredentials
        } else {
            # Если не нашли по полному названию, попробуем вывести отладочную инфу
            Write-Host "  [-] Документ не найден. Возможно, название в базе отличается." -ForegroundColor Red
        }
    } catch {
        Write-Host "  [!] Ошибка связи с SharePoint: $($_.Exception.Message)" -ForegroundColor Red
    }
}

Write-Host "`n--- Завершено! ---" -ForegroundColor White
Read-Host "Нажмите Enter для выхода"