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


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

$csvPath = "data.csv"
$downloadDir = "downloads"
$baseDomain = "https://main.atb.su"

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

Write-Host "--- Читаю базу данных ---" -ForegroundColor Yellow

# Умное чтение CSV: пробуем точку с запятой. Если не вышло - пробуем запятую.
$data = Import-Csv -Path $csvPath -Delimiter ";" -Encoding UTF8
if ($data.Count -gt 0 -and -not $data[0]."Название") {
    $data = Import-Csv -Path $csvPath -Delimiter "," -Encoding UTF8
}

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

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

    # 1. СНАЧАЛА ПРОБУЕМ API ПОИСКА SHAREPOINT (самый надежный метод)
    $escTitleSearch = $title -replace "'", "''" # Экранируем кавычки для запроса
    $searchApiUrl = "$baseDomain/normdocs/_api/search/query?querytext='Title:`"$escTitleSearch`"'"

    try {
        $apiResponse = Invoke-WebRequest -Uri $searchApiUrl -UseDefaultCredentials -TimeoutSec 20
        
        # Ищем ссылку на файл (pdf, doc, docx, xlsx и т.д.) в XML-ответе
        if ($apiResponse.Content -match '(https://main\.atb\.su/[^<]+?\.(pdf|docx?|rtf|xlsx?))') {
            $fileUrl = $matches[1]
            $rawFileName = $fileUrl.Split('/')[-1]
            $fileName = [System.Web.HttpUtility]::UrlDecode($rawFileName)
            $savePath = Join-Path $downloadDir $fileName

            Write-Host "  [+] Найдено через API! Скачиваю: $fileName" -ForegroundColor Green
            Invoke-WebRequest -Uri $fileUrl -OutFile $savePath -UseDefaultCredentials
            continue # Переходим к следующему документу
        }
    } catch {
        # Если API не ответил, просто молча идем к запасному методу
    }

    # 2. ЗАПАСНОЙ МЕТОД: ПОИСК ПО ФИЛЬТРУ КАТЕГОРИИ (как было раньше)
    $escTitleUrl = [uri]::EscapeDataString($title)
    $fallbackUrl = "$baseDomain/normdocs/Lists/Docs/ByCategory.aspx?FilterField1=Title&FilterValue1=$escTitleUrl"

    try {
        $page = Invoke-WebRequest -Uri $fallbackUrl -UseDefaultCredentials -TimeoutSec 20
        
        if ($page.Content -match 'href="([^"]*?Attachments/[^"]+)"') {
            $matchedUrl = $matches[1]
            
            # --- ИСПРАВЛЕНИЕ ОШИБКИ ИМЕНИ ХОСТА ---
            if ($matchedUrl -match "^http") {
                $fileUrl = $matchedUrl # Ссылка уже полная
            } else {
                if (-not $matchedUrl.StartsWith("/")) { $matchedUrl = "/$matchedUrl" }
                $fileUrl = "$baseDomain$matchedUrl" # Клеим домен аккуратно
            }

            $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 Yellow
        }
    } catch {
        Write-Host "  [!] Ошибка связи с SharePoint: $($_.Exception.Message)" -ForegroundColor Red
    }
}

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