Configurer un proxy pour Powershell
TL;DR
La plupart des commandes Powershell comme Invoke-WebRequest
ou Invoke-RestMethod
acceptent les paramètres -Proxy
et -ProxyUseDefaultCredentials
pour configurer le proxy http à utiliser lors des appels réseau.
Le paramètre -Proxy
Dans ce second article sur la fastidieuse configuration des proxy http pour la ligne de commande sous Windows, j’aborde quelques solutions pour les commandlets Powershell.
Il n’est, là encore, pas possible de passer de manière transparente par le proxy défini au niveau du système d’exploitation. Mais on peut néanmoins récupérer son paramétrage en faisant un appel à :
([System.Net.WebRequest]::GetSystemWebproxy())
Dans les faits le proxy à utiliser peut varier, en fonction du service distant qu’on souhaite appeler : par exemple, une entreprise peut avoir défini un proxy spécifique pour les services dans son LAN et un autre proxy pour sortir vers internet.
Pour récupérer la bonne instance de proxy, on peut appeler la méthode GetProxy
et lui passer par exemple une des futures adresses à interroger :
$example_address_to_query = 'https://swapi.dev/'
$proxy = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($example_address_to_query)
On peut se servir de cet objet $proxy
grâce aux paramètres -Proxy
et -ProxyUseDefaultCredentials
, qui sont acceptés par la plupart des commandes pouvant faire des appels vers le réseau :
-Proxy
avec l’objet$proxy
préalablement récupéré- et
-ProxyUseDefaultCredentials
pour utiliser les identifiants par défaut définis dans le proxy système
Ce qui donne par exemple:
Invoke-WebRequest "https://swapi.dev/api/people/1/" -Proxy $proxy -ProxyUseDefaultCredentials
Si on ne peut pas utiliser -ProxyUseDefaultCredentials
, on peut passer le paramètre -ProxyCredential
auquel on fournit les informations récupérés, par exemple, par Get-Credential
:
$my_credentials = Get-Credential
Invoke-WebRequest "https://swapi.dev/api/starships/9/" -Proxy $proxy -ProxyCredential $my_credentials
Conclusion
Le script peut être ajouté à $PROFILE
(notepad $PROFILE
) et/ou défini dans
une fonction Powershell personnalisée :
function Get-DefaultSystemProxy
{
param($example_address_to_query = 'https://www.google.fr')
$proxy = ([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy($example_address_to_query)
}
$default_proxy = Get-DefaultSystemProxy