Lors de l'appel d'un Invoke-RestMethod en utilisant Powershell comme:
$headers = @{
Authorization="Secret $username $password"
Content='application/json'
}
et $ headers étant
Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -Headers $headers
Quel est le format attendu pour les paramètres $ username et $password?
3 Réponses :
Pour autant que je sache, vous devez envoyer un jeton OAuth2 dans les en-têtes de la requête.
$headers = @{
Authorization="Bearer $token"
}
Peut-être que le billet de blog suivant vous donne une idée de la façon de procéder. https://lazyadmin.nl/it/connect-to-google -api-avec-powershell /
La solution fournie par Rufer7 est correcte. Je veux juste ajouter une chose que vous pouvez également passer le paramètre de contenu dans la méthode Invoke-WebRequest en gardant l'en-tête plus simple comme celui-ci et en obtenant la sortie au format Json. Donc, mon script raffiné ressemblera à ceci.
Script PowerShell:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$headers = @{
Authorization="Bearer $token"
}
$responseData = (Invoke-WebRequest -Uri $Url -Method Get -Headers $headers -UseBasicParsing -ContentType "application/json").Content | ConvertFrom-Json | ConvertTo-Json
La première ligne est facultative uniquement si vous observez cette erreur Sinon, vous pouvez l'ignorer.
"Invoke-WebRequest: La requête a été abandonnée: impossible de créer un canal sécurisé SSL / TLS."
Dans mon scénario, j'ai utilisé username et password dans le corps de l'appel d'API REST.
Mon corps est:
Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -ContentType application/json -Body $body
Dans la fonction, j'utilise la classe PSCredential:
[System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential = [System.Management.Automation.PSCredential]::Empty,
Finalement, je l'appelle ainsi:
$body = [PSCustomObject] @{
username=$Credential.UserName;
password=$Credential.GetNetworkCredential().Password;
} | ConvertTo-Json
Le ContentType est défini, car j'attends JSON en réponse.