# Принудительно ставим кодировку консоли
[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 для выхода"