Я пытаюсь автоматизировать мой процесс, который включает в себя выборку ежемесячных отчетов, которые генерируются первого числа каждого месяца за предыдущий месяц.Системы, которые генерируют эти отчеты, имеют различные способы их распространения, некоторые загружаются на SFTP-сервер, некоторые отправляются по электронной почте в виде вложений, а те, которые я сейчас пытаюсь получить, хранятся на веб-сервере.
Используя какой-то другой код, который я обнаружил, я смог пройти аутентификацию на веб-сервере по URL-адресу, на котором размещен один из отчетов, и я могу успешно загрузить отчет.
Вот код:
$request = Invoke-WebRequest $url -SessionVariable fb
$form = $request.Forms[0]
$form.Fields["username"] = "username"
$form.Fields["password"] = "password"
$downloadPath = "C:\Users\user\Documents\Reports_January_2019\File Servers\department1\"
$reportDate = (Get-Date -UFormat %b) + "01" + (Get-Date -UFormat %Y)
$url = "https://ourwebsite.com/schedule-reports/reportname/" + $reportDate + "/12-33-0-PM/servername1/monthlyreport.pdf"
Invoke-WebRequest -Uri ($url + $form.Action) -WebSession $fb -Method POST -Body $form.Fields
Invoke-WebRequest -Uri $url -OutFile ($downloadPath + "monthlyreport_servername1.pdf")
Этот код работает, поэтому я могу скачать .pdf в указанном месте.Есть несколько других серверов, на которых выполняется отчет, поэтому я пытаюсь найти эффективный способ загрузки отчетов, созданных для других серверов.Для этого определенные части URL изменяются.Части, которые изменяются, - это дата, имя сервера и имя отчета, в котором также есть имя сервера.Переменная $reportDate
отображает динамическую часть URL-адреса для даты, когда отчет был сгенерирован правильно.
Я попытался изменить этот код и выполнить два цикла foreach
, но это то, где я запутался.Вот код, который я пытаюсь заставить загружать все 7 отчетов, используя массив, содержащий имена серверов:
$request = Invoke-WebRequest $url -SessionVariable fb
$form = $request.Forms[0]
$form.Fields["username"] = "username"
$form.Fields["password"] = "password"
$downloadPath = "C:\Users\user\Documents\Reports_January_2019\File Servers\$server\"
$servers = @("department1", "department2", "department3", "department4", "department5", "department6", "department7")
$serverNames = @("server1", "server2", "server3", "server4", "server5", "server6", "server7")
$reportDate = (Get-Date -UFormat %b) + "01" + (Get-Date -UFormat %Y)
$url = "https://ourwebsite.com/schedule-reports/reportname/" + "$reportDate" + "/12-33-0-PM/" + "$serverName" + "/monthlyreport.pdf"
foreach ($serverName in $serverNames) {
Invoke-WebRequest -Uri ($url + $form.Action) -WebSession $fb -Method POST -Body $form.Fields
foreach ($server in $servers) {
Invoke-WebRequest -Uri $url -OutFile ($downloadPath + "monthlyreport_$serverName.pdf")
}
}
В результате, когда я запускаю это, я получаю 7 .pdf файлов, и онивсе названы соответствующим образом (monthreport_ $serverName
.pdf), но размер файла для всех них составляет 6 КБ, и их нельзя открыть в программе чтения PDF, поскольку они каким-то образом повреждены.6 КБ не соответствует размеру файла любого из отчетов, поэтому что-то определенно испорчено.Кроме того, они не перемещаются в свою собственную папку согласно переменной $downloadPath
, а вместо этого все 7 файлов заканчиваются на "C:\Users\user\Documents\Reports_January_2019\File Servers\department7\"
. Любое руководство будет с благодарностью!Спасибо!