Скрипт Powershell работает в ISE, но не работает в Azure Runbook

У меня есть сценарий PowerShell следующим образом:

$headers = @{}
$headers.Add('ApiKey','xxx')
$file = 'xxx.zip'
Invoke-WebRequest "https://myurl/Export/" -Headers $headers -Outfile $file

Это отлично работает на моем локальном компьютере, но когда я запускаю его в книге Azure, я получаю:

Код состояния ответа не указывает на успех: 400 (неверный запрос).

Может ли проблема быть в версии Powershell или в каких-то других идеях?

Запустил его локально из командной строки cmd, используя файл Powershell, и он работает. Запуск его в Runbook Azure не работает.

У вас может быть файл cookie на локальном компьютере, который позволяет коду работать, но не иметь файла cookie на удаленном компьютере. Я подозреваю, что если вы удалите файлы cookie на локальном компьютере, это тоже не сработает. Лучший способ начать работу — использовать Postman. Сначала попробуйте на рабочей машине. У Postman есть панель управления, где вы можете просмотреть весь запрос, включая заголовки. Почтальон автоматически добавит недостающие заголовки. Проверьте панель управления и какие заголовки отправляются. Затем повторите действия на неработающей машине и проверьте заголовки. Решение — добавить в код недостающие заголовки.

jdweng 11.07.2024 21:54

В Postman он отлично работает. Я воссоздал Azure Runbook с помощью Powershell V7.1, и процесс работает. В версии 7.2 это не работает. Должен быть какой-то устаревший синтаксис.

Jeremy Reynolds 11.07.2024 22:31

Вероятно, к запросу в версии 7.1 добавляются заголовки по умолчанию, которые не добавляются в версии 7.2. Проверьте панель управления Postman и получите все заголовки HTTP. Затем добавьте недостающие заголовки в свой запрос PS. Также проверьте версию HTTP в Postman, если она 1.0 или 1.1. Я считаю, что PS теперь использует HTTP 1.1.

jdweng 12.07.2024 02:20

Какое-нибудь внутреннее исключение? (Используйте: Get-Error). В общем, попробуйте: [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 (или более низкую версию).

iRon 12.07.2024 10:32

Привет @JeremyReynolds! Вы можете попробовать использовать PowerShell V5.1 в runbook.

Venkat V 15.07.2024 06:07
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скрипт Powershell работает в ISE, но не работает в Azure Runbook

Существует несколько причин ошибки 400 Bad Request в учетной записи автоматизации.

Обязательно убедитесь, что версия PowerShell в Azure runbook совместима со сценарием, а также проверьте сетевые ограничения.

Вот обновленный PowerShell script, в котором можно получить более подробную информацию о запросе и ответе.

    $PSVersionTable.PSVersion
    
    Test-NetConnection -ComputerName "jsonplaceholder.typicode.com" -Port 443
    $headers = @{}
    $headers.Add('ApiKey', 'test-api-key') 
    $file = 'test-response.json'
    $url = "https://jsonplaceholder.typicode.com/posts"
    Write-Output "Headers: $($headers | Out-String)"
    try {
        $response = Invoke-WebRequest -Uri $url -Headers $headers -OutFile $file -ErrorAction Stop
        Write-Output "Response: $($response | Out-String)"
    } catch {
        Write-Output "Error: $_"
        if ($_.Exception.Response) {
            $responseStream = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
            $responseBody = $responseStream.ReadToEnd()
            Write-Output "Response Body: $responseBody"
        }
    }

Выход:

Примечание. В моем случае я использовал общедоступный URL-адрес и образец данных с версией среды выполнения 5.1.

Если в сценарии возникнет какая-либо проблема, он обнаружит ошибку и отобразит ее, как показано ниже.

Другие вопросы по теме

Похожие вопросы

Как создать переменную инициализации приложения логики Azure после действия анализа json
Data Factory Parquet неправильно принимает десятичные дроби
Запрос GetBlob завершается с ошибкой, когда PutBlob и ListBlob выполняются успешно
Частная конечная точка Azure с Terraform — разумный способ сопоставления между подресурсом и частной зоной DNS
Что следует указать для «repoOwners» в политике федеративных учетных данных управляемой идентификации?
Невозможно запустить приложение .NET Core в Linux в службах приложений Azure с linuxFxVersion: «DOTNETCORE:8.0»
Условная сортировка в Фабрике данных Azure
Получение статуса активности федерального пользователя Microsoft Graph API
Используйте сертификат PFX для получения токена Microsoft Entra. Ошибка: secretOrPrivateKey должен быть асимметричным ключом при использовании RS256
Проблема с подтверждением связи Azure EventHub при автоматической настройке весенней загрузки