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


# Принудительно ставим кодировку консоли
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# Переходим в папку скрипта
Set-Location $PSScriptRoot

$csvPath = "data.csv"
$downloadDir = "downloads"
$baseDomain = "https://main.atb.su"
# Базовый URL списка без фильтров
$listUrl = "https://main.atb.su/normdocs/Lists/Docs/ByCategory.aspx"

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

# Пробуем прочитать CSV (сначала через точку с запятой, если не выйдет - через запятую)
$data = Import-Csv -Path $csvPath -Delimiter ";" -Encoding UTF8
if ($data[0]."Название" -eq $null) { $data = Import-Csv -Path $csvPath -Delimiter "," -Encoding UTF8 }

Write-Host "--- Начинаю обработку документов ---" -ForegroundColor Yellow

foreach ($row in $data) {
    $rawTitle = $row."Название"
    $rawCat = $row."Категория"
    
    if ([string]::IsNullOrWhiteSpace($rawTitle)) { continue }

    # Убираем лишние пробелы и странные символы, которые ломают URI
    $cleanTitle = $rawTitle.Trim().Replace("…", "...").Replace("—", "-")
    $cleanCat = $rawCat.Trim()

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

    try {
        # Формируем параметры запроса отдельно, чтобы PowerShell сам их правильно закодировал
        $params = @{
            FilterField1 = "Title"
            FilterValue1 = $cleanTitle
            FilterField2 = "DocCategory"
            FilterValue2 = $cleanCat
        }
        
        # Запрос к странице с использованием системной учетки
        $page = Invoke-WebRequest -Uri $listUrl -Body $params -UseDefaultCredentials -Method Get -TimeoutSec 15
        
        # Ищем ссылку на вложение (Attachment)
        if ($page.Content -match 'href="([^"]*?Attachments/[^"]+)"') {
            $relativeUrl = $matches[1]
            $fileUrl = "$baseDomain$relativeUrl"
            
            # Декодируем имя файла для сохранения
            $fileName = [System.Web.HttpUtility]::UrlDecode($fileUrl.Split('/')[-1])
            $savePath = Join-Path $downloadDir $fileName

            if ($page.Content -match "Действителен") {
                Write-Host "  [+] Найдено! Статус 'Действителен'. Скачиваю..." -ForegroundColor Green
                Invoke-WebRequest -Uri $fileUrl -OutFile $savePath -UseDefaultCredentials
            } else {
                Write-Host "  [!] Пропуск: документ найден, но он не в статусе 'Действителен'" -ForegroundColor Yellow
            }
        } else {
            Write-Host "  [-] Документ не найден в системе (проверьте название/категорию)." -ForegroundColor Red
        }
    } catch {
        Write-Host "  [!] Ошибка URI или доступа: $($_.Exception.Message)" -ForegroundColor Red
    }
}

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