Question

Quand on fait un simple demande Internet existe-t-il un moyen d'indiquer à l'environnement PowerShell d'utiliser uniquement les paramètres de proxy de votre Internet Explorer ?

Mes paramètres de proxy sont contrôlés par une politique réseau (ou un script) et je ne veux pas avoir à modifier les scripts ps plus tard si je n'y suis pas obligé.

MISE À JOUR:Excellentes informations des participants.Le modèle de script final que j'utiliserai pour cela ressemblera à ceci :

$proxyAddr = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
$proxy = new-object System.Net.WebProxy
$proxy.Address = $proxyAddr
$proxy.useDefaultCredentials = $true

$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$str = [System.Text.Encoding]::ASCII.GetString($webpage)
Write-Host $str
Était-ce utile?

La solution

Untested :

$user = $env:username
$webproxy = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet
Settings').ProxyServer
$pwd = Read-Host "Password?" -assecurestring

$proxy = new-object System.Net.WebProxy
$proxy.Address = $webproxy
$account = new-object System.Net.NetworkCredential($user,[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)), "")
$proxy.credentials = $account

$url = "http://stackoverflow.com"
$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)
$string = [System.Text.Encoding]::ASCII.GetString($webpage)

...

Autres conseils

Ce qui suit est un peu meilleur, qui gère également les proxys détectés automatiquement :

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

$wc = new-object system.net.WebClient
$wc.proxy = $proxy
$webpage = $wc.DownloadData($url)

(modifier) ​​Suite à ce qui précède, cette définition semble également fonctionner très bien pour moi :

function Get-Webclient {
    $wc = New-Object Net.WebClient
    $wc.UseDefaultCredentials = $true
    $wc.Proxy.Credentials = $wc.Credentials
    $wc
}
$proxy = New-Object System.Net.WebProxy("http://yourProxy:8080")
$proxy.useDefaultCredentials = $true
$wc = new-object system.net.webclient
$wc.proxy = $proxy
$wc.downloadString($url)

C'est beaucoup plus tard que la question d'origine, mais cela reste une réponse pertinente pour les versions ultérieures de PowerShell.À partir de la v3, nous avons deux éléments qui peuvent résoudre ce problème :

Invoquer-WebRequest - qui remplace l'utilisation de system.net.webclient pour presque tous les scénarios

$PSDefaultParameterValues - qui peut stocker les détails des paramètres

Comment les utiliser ensemble pour résoudre le problème initial des paramètres de proxy contrôlés par une politique réseau (ou un script) et ne pas avoir à modifier les scripts ps ultérieurement ?

Invoke-WebRequest est livré avec les paramètres -Proxy et -ProxyUseDefaultCredentials.

Nous stockons nos réponses à ces paramètres dans $PSDefaultParameterValues, comme ceci :$PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy','http://###.###.###.###:80') $PSDefaultParameterValues.Add('Invoke-WebRequest:ProxyUseDefaultCredentials',$true)

Vous pouvez remplacer 'http://###.###.###.###:80' avec $proxyAddr comme vous le ferez.La portée dans laquelle vous choisissez de stocker cela est votre choix.Je les ai mis dans mon $profile, donc je n'ai plus jamais besoin de définir ces éléments dans mes scripts.

J'espère que cela aide quelqu'un !

Il suffit de mettre à jour l'URL avec votre propre adresse proxy: port. Il permet PowerShellGet de passer devant le proxy en utilisant vos informations d'identification locales. Si vous n'avez pas besoin des titres de compétence, cliquez sur OK lorsque vous êtes invité pour votre mot de passe. Je renomme cette boîte à « Fermer cette fenêtre ». Vous pouvez également utiliser d'autres gestionnaires de paquets comme chocolaté / Nuget par le proxy à cause de ce script.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top