Accéder au web en utilisant Powershell et Proxy

je n'arrive pas à obtenir l'accès à une page web à l'aide de Powershell. Je continue de recevoir un "(407) authentification Proxy requise". J'ai essayé beaucoup de choses. Je ne sais pas ce qu'est le proxy ou quel type d'authentification il nécessite. La seule chose à laquelle j'ai accès est dans IE il utilise un script pour la configuration. J'ai essayé d'utiliser quelques IPs de ça, mais pas de chance. Des idées?

Voici un exemple de ce que j'ai essayé:

$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent","Mozilla/4.0+")        
$wc.Proxy = [System.Net.WebRequest]::DefaultWebProxy
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$wc.DownloadString("http://stackoverflow.com")
17
demandé sur user1612851 2013-01-10 21:07:55

6 réponses

j'ai eu un problème similaire et résolu avec seulement deux lignes de powershell:

$browser = New-Object System.Net.WebClient
$browser.Proxy.Credentials =[System.Net.CredentialCache]::DefaultNetworkCredentials 

Espérons que cette aide.

49
répondu Steve 2014-08-01 14:33:47

Je n'ai jamais vu quelqu'un faire quelque chose comme ça mais il y a une façon de le faire comme un "cadre global" dans votre script Powershell (je me souviens avoir fait ça dans C# avant pour les constructions locales de dev).

[System.Net.WebRequest]::DefaultWebProxy = [System.Net.WebRequest]::GetSystemWebProxy()
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

de cette façon, si vous ne voulez pas mettre à jour tous vos WebClients avec des détails de proxy, vous pouvez simplement Outrepasser le paramètre global (doit être fait chaque fois que vous exécutez le script). Mais cela suppose que L'utilisateur Windows actuellement connecté est valide pour le proxy défini par le système serveur.

NOTE: je dirais que c'est seulement utile comme moyen rapide et sale pour faire fonctionner un script PS qui n'était pas au courant de proxy avant (comme fabrication de gâteaux).

5
répondu Dandré 2016-12-15 15:15:32

si le mandataire répond "407", "authentification par procuration requise", alors l'authentification est requise:

$Username="Hugo"
$Password="abcdefgh"
$WebProxy = New-Object System.Net.WebProxy("http://webproxy:8080",$true)
$url="http://aaa.bbb.ccc.ddd/rss.xml"

$WebClient = New-Object net.webclient

$WebClient.Proxy=$webproxy
$WebClient.proxy.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
$path="C:\Users\hugo\xml\test.xml"
$WebClient.DownloadFile($url, $path)

le contenu se trouve maintenant dans " test.xml"

4
répondu Coliban 2016-02-16 14:14:54

si vous utilisez ce qui suit, vous recevrez une invite pour entrer vos informations d'identification:

$client.Credentials = Get-Credential
1
répondu Rob Bell 2014-11-20 12:36:34

si vous connaissez le script - il suffit de le télécharger, d'ouvrir avec Notepad et de trouver L'IP et le port de votre serveur mandataire. En ce qui concerne l'authentification - très probablement vos identifiants windows sont utilisés, donc en théorie vous devriez être en mesure de le garder vide, à moins qu'il y ait quelque chose de suspect dans le script.

0
répondu Andrey Marchuk 2013-01-16 13:24:47

essayez d'ajouter des identifiants de cache....

$domain = 'ChDom'
$Client = new-object System.Net.WebClient
$cc = New-object System.Net.CredentialCache
$urlObj = New-object System.Uri($url)

#these variables must be plaintext strings
$creds = New-object System.Net.NetworkCredential($Username,$Password)

#your auth might be different than mine
$cc.add($urlobj,"NTLM",$creds)
$client.Credentials = $cc
$Client.Downloadfile($url, C:\Temp\TestPage.html)
0
répondu Christopher Douglas 2013-02-05 22:45:47