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")
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.
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).
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"
si vous utilisez ce qui suit, vous recevrez une invite pour entrer vos informations d'identification:
$client.Credentials = Get-Credential
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.
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)