2013-12-09 20 views
5

Folgendes funktioniert auf meinem Computer, der keinen Web-Proxy verwendet.Wie kann ich Invoke-RestMethod den Standard-Web-Proxy verwenden?

return Invoke-RestMethod 
    -Uri $server$url 
    -ContentType $contentType 
    -Headers $headers 
    -Method $method 
    -UseDefaultCredentials 

Hinweis: Die $server$url ist ein https Adresse, so etwas wie https://somewhere.example.com/api/data

Jetzt zu arbeiten in Ich versuche, es zu bekommen eine Unternehmensumgebung, aber ich bekomme einen Fehler 401.

Ich denke, das liegt daran, dass es einen Corporate Proxy gibt, der mit einer proxy.pac Datei definiert ist. Ich habe bestätigt, dass ich vom Internet Explorer zum $server$url URI gelangen kann. Was muss ich tun, damit der Befehl Invoke-RestMethod mit den gleichen Einstellungen funktioniert?

Ich habe versucht, das Hinzufügen -proxy Parameter

$proxy = [System.Net.WebRequest]::GetSystemWebProxy() 
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials 

return Invoke-RestMethod 
    -Uri $server$url 
    -ContentType $contentType 
    -Headers $headers 
    -Method $method 
    -UseDefaultCredentials 
    -Proxy $proxy 
    -ProxyUseDefaultCredentials 

aber der -Proxy Parameter wird eine URI kein IWebProxy Objekt erwartet.

Antwort

2

Edit: Wenn eine falsche Adresse des Befehls zur Verfügung gestellt wird, nicht mehr funktioniert und gibt die Adresse anstelle der Proxy-Adresse zur Verfügung gestellt .. Diese Mitteilung nicht verwenden: Mit dem Code-Schnipsel in this, ich bin in der Lage, die Proxy-uri abrufen von Powershell als solche:

[System.Net.WebRequest]::DefaultWebProxy.GetProxy([uri]("http://www.google.com")) 

Verwenden Sie stattdessen:

[System.Net.WebRequest]::GetSystemWebProxy().GetProxy("http://www.google.com") 

Es gibt immer noch die mitgelieferte URI (oder wirft), wenn die uri ungültig ist, aber einmal richtig uri vorgesehen ist, st Kunst arbeitet wieder.

+0

Hmm ... in meinem Fall ist die URL eine https-Adresse. Dann 'GetSystemWebProxy(). GetProxy()' gibt zurück _Der ServicePointManager unterstützt keine Proxies mit dem https-Schema_. – shamp00

5

Die angenommene Antwort hat mich gestartet. Hier ist die Vollversion

$headers = @{"X-My-ApiKey"=$apiKey} 
$contentType = "application/json" 

$proxyUri = [Uri]$null 
$proxy = [System.Net.WebRequest]::GetSystemWebProxy() 
if ($proxy) 
{ 
    $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials 
    $proxyUri = $proxy.GetProxy("$server$url") 
} 

if ("$proxyUri" -ne "$server$url") 
{ 
    Write-Host "Using proxy: $proxyUri" 
    return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials -Proxy $proxyUri -ProxyUseDefaultCredentials 
} 
else 
{ 
    return Invoke-RestMethod -Uri $server$url -ContentType $contentType -Headers $headers -Method $method -UseDefaultCredentials 
} 
Verwandte Themen