2017-01-12 18 views
0

Привет, Я запускаю следующую команду «Invoke-RestMethed» в Powershell v4, но это вызывает ошибку HTTP 406.Powershell v4 Invoke-RestMethod: HTTP Status 406

Invoke-RestMethod -Method Post -Uri $url -Headers $head -ContentType "application/xml" -Body $body -OutFile output.txt 

Я сделал следующие изменения в заголовок:

$head = @{"Authorization"="Basic $auth"; "Accept"="*/*"} 

Мое понимание сервер принимает запрос в формате XML, но вернуться в формате JSON и, возможно, то будет причиной проблемы? Я попытался изменить заголовок на «Принять» = «application/json», но получить ту же ошибку.

Полная ошибка:

Invoke-RestMethod : HTTP Status 406 - type Status report message description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

+0

Не зная, что URL вы работаете против него трудно дать какие-либо предложения в качестве проблема, вероятно, связана с этим URL в моем опыте. – TravisEz13

+0

Его внутренний URL-адрес для VMware NSX Manager '$ Url =" https: //nsxmgr-l-01a.corp.local/api/1.0/nsx/cli? Action = execute "' – user3784080

+0

Вы пытались удалить заголовок Accept? Если посмотреть на другие образцы, которые называют NSX API, используя PowerShell, они используют только заголовок авторизации. – TravisEz13

ответ

0

Существует красивая функция StackOverflow для этого вопроса. Вот ссылка: Execute-Request

Это должно помочь вам:

Function Execute-Request() 
{ 
Param(
    [Parameter(Mandatory=$True)] 
    [string]$Url, 
    [Parameter(Mandatory=$False)] 
    [System.Net.ICredentials]$Credentials, 
    [Parameter(Mandatory=$False)] 
    [bool]$UseDefaultCredentials = $True, 
    [Parameter(Mandatory=$False)] 
    [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get, 
    [Parameter(Mandatory=$False)] 
    [Hashtable]$Header, 
    [Parameter(Mandatory=$False)] 
    [string]$ContentType 
) 

    $client = New-Object System.Net.WebClient 
    if($Credentials) { 
    $client.Credentials = $Credentials 
    } 
    elseif($UseDefaultCredentials){ 
    $client.Credentials = [System.Net.CredentialCache]::DefaultCredentials 
    } 
    if($ContentType) { 
     $client.Headers.Add("Content-Type", $ContentType) 
    } 
    if($Header) { 
     $Header.Keys | % { $client.Headers.Add($_, $Header.Item($_)) } 
    }  
    $data = $client.DownloadString($Url) 
    $client.Dispose() 
    return $data 
} 

Использование:

Execute-Request -Url "https://URL/ticket" -UseDefaultCredentials $true 

Execute-Request -Url "https://URL/ticket" -Credentials $credentials -Header @{"Accept" = "application/json"} -ContentType "application/json" 
+0

Спасибо @ Ranadip К сожалению, я не могу добавить' -Body' в эту функцию. – user3784080