Certains scripts powershell peuvent nécessiter un accès au Web, comme par exemple ceux utilisés pour piloter un tenant Azure.
Or, la majorité des organisations utilisent aujourd’hui des proxy pour contrôler ces accès à Internet et il est préférable d’éviter autant que possible les exceptions à cette règle, y compris lorsque c’est un script qui a besoin de se connecter.
Certains cmdlet ont en plus une facheuse tendance à ignorer les paramètres de proxy de l’utilisateur qui les exécute (c’est le cas des cmdlet Azure Powershell tels que Login-AzureRmAccount), et il n’est pas toujours possible ou souhaitable de définir un proxy au niveau du système, via la commande netsh winhttp set proxy…
Heureusement, il est possible de spécifier ces paramètres directement au sein du script !
Dans un premier temps, il est nécessaire de spécifier l’adresse du Proxy :
$proxyAddress = "http://1.2.3.4:8080"
$proxyUri = new-object System.Uri($proxyAddress)
[System.Net.WebRequest]::DefaultWebProxy = new-object System.Net.WebProxy ($proxyUri, $true)
Si le proxy accepte les connexions anonymes, cela peut suffire.
Autrement, il sera nécessaire de spécifier des credentials autorisés à s’y connecter. Dans ce cas, deux possibilité :
- Soit vous ré-utilisez les credentials de l’utilisateur qui exécute le script :
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
- Soit vous utilisez les credentials d’un autre compte :
$proxyAccountName = "domain\user"
$proxyPassword = ConvertTo-SecureString "PASSWORD" -AsPlainText -Force
$proxyCred = New-Object System.Management.Automation.PSCredential($proxyAccountName, $proxyPassword)
[System.Net.WebRequest]::DefaultWebProxy.Credentials = $proxycred
En plaçant ces quelques lignes avant toute exécution de cmdlet nécessitant un accès au Web, vous ne devriez plus rencontrer de problème!