Invoke-RESTMethod PowerShell - PullRequest
       3

Invoke-RESTMethod PowerShell

0 голосов
/ 07 ноября 2018

Я пытаюсь использовать метод Invoke-Restmethod для вызова набора API, но он не работает с приведенной ниже ошибкой, я также опубликовал тот же формат json, могут ли некоторые дать мне знать, что может быть не так?

    ### Ignore TLS/SSL errors
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}}
"@

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12


#Create URL string for Invoke-RestMethod
$urlsend = 'https://' + 'vrslcm-01a.corp.local/lcm/api/v1/' + '/login'


#Credential

$Username = "admin@localhost"
$password = "VMware1!"

$basicAuth = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($Username):$Password"))
    $headers = @{

        "description"= "Testing Authentication"
    }

    $body = @{
                    $raw= '{\n\t\"username\": \"admin@localhost\",\n\t\"password\": \"vmware\"\n}'
                    "mode"= $raw
            }

Invoke-RestMethod -Method POST -uri $urlsend -Headers $headers -Body $body -ContentType 'application/json'

enter image description here

Вот пример jSON, который я пытаюсь вызвать через powershell, он состоит из заголовка и тела. Мне нужно понять, как мы можем вызвать тот же пример JSON POSTMAN через PowerShell Invoke-RestMethod

"item": [
        {
            "name": "authorization",
            "description": "",
            "item": [
                {
                    "name": "Login",
                    "event": [
                        {
                            "listen": "test",
                            "script": {
                                "type": "text/javascript",
                                "exec": [
                                    "var response=JSON.parse(responseBody)",
                                    "postman.setEnvironmentVariable(\"token\", response.token)"
                                ]
                            }
                        }
                    ],
                    "request": {
                        "url": "{{Server}}/lcm/api/v1/login",
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json",
                                "description": ""
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n\t\"username\": \"admin@localhost\",\n\t\"password\": \"vmware\"\n}"
                        },
                        "description": ""
                    },
                    "response": []
                },
                {
                    "name": "Logout",
                    "request": {
                        "url": "{{Server}}/lcm/api/v1/logout",
                        "method": "POST",
                        "header": [
                            {
                                "key": "x-xenon-auth-token",
                                "value": "{{token}}",
                                "description": ""
                            }
                        ],
                        "body": {},
                        "description": ""
                    },
                    "response": []
                }
            ]
        },

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

make $raw в хеш-таблицу типа

$raw = @{
    username=$Username
    password=$Password
}

добавить эту хеш-таблицу к $body хеш-таблице

$body = @{         
    mode= $raw
}

но теперь это все еще хеш-таблица, которую API-интерфейс не может использовать. таким образом, преобразовать его в JSON, как

$jsonBody = $body | ConvertTo-Json

использование $jsonBody должно работать при использовании как

Invoke-RestMethod -Method POST -uri $urlsend -Headers $headers -Body $jsonBody -ContentType 'application/json'
0 голосов
/ 07 ноября 2018

Как и в случае с ошибкой, проблема в определении хеша.

Нулевой ключ не допускается в хеш-литерале.

PowerShell пытается оценить $ raw как ключ хеш-таблицы . Так как он не был определен до того, как он станет нулевым, и произойдет сбой, поскольку нулевой недопустим. Попробуйте это так:

$raw= '{\n\t\"username\": \"admin@localhost\",\n\t\"password\": \"vmware\"\n}'

$body = @{         
    "mode"= $raw
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...