So beheben Sie Probleme beim PowerShell-Proxyzugriff hinter einem Unternehmensnetzwerk
PowerShell hinter einem Firmenproxy nutzen? Ja, das kann manchmal ganz schön nervig sein. Manchmal stößt man bei Befehlen wie `update` Update-Helpoder ` Invoke-WebRequestupdate` auf Fehlermeldungen, dass keine Verbindung hergestellt werden kann. Das liegt daran, dass PowerShell, insbesondere die ältere Windows PowerShell 5.1, die Proxy-Einstellungen des Systems nicht automatisch für Webanfragen verwendet. Das ist ein echter Haken, wenn man es gewohnt ist, Befehle einfach auszuführen und sie funktionieren sofort. Normalerweise tritt dieses Problem auf, wenn man sich in einem geschützten Netzwerk befindet, das den Internetverkehr über einen Proxy-Server leitet, oft mit Authentifizierung. PowerShell über diesen Proxy zu betreiben, ist zwar möglich, erfordert aber manuelle Konfiguration, da Windows es einem natürlich unnötig schwer macht. Man erhält Fehlermeldungen wie „Verbindung zum Remoteserver nicht möglich“ oder bei Update-Befehlen die Meldung, dass Inhalte nicht verfügbar sind oder die Paketquelle nicht aufgelöst werden kann. Nicht gerade benutzerfreundlich. Die gute Nachricht: Es gibt mehrere Möglichkeiten, PowerShell so zu konfigurieren, dass Internetanfragen korrekt über Ihren Proxy geleitet werden – egal ob Sie die klassische PowerShell (5.1) oder PowerShell Core (6+) verwenden. Wir gehen die wichtigsten Methoden durch: die Einrichtung des WinHTTP-Proxys, die Authentifizierung und die Speicherung der Einstellungen in Ihrem Profil, damit Sie diese nicht bei jeder Sitzung erneut vornehmen müssen.
So beheben Sie Proxy-Zugriffsprobleme in PowerShell
WinHTTP-Proxy-Einstellungen festlegen – da PowerShell diese Standardeinstellung für viele Aufgaben verwendet.
Das sollten Sie als Erstes überprüfen. PowerShell verwendet intern WinHTTP-Einstellungen, die unabhängig von den Proxy-Einstellungen Ihres Browsers oder Internet Explorers sind. Um die aktuellen Einstellungen zu überprüfen, öffnen Sie PowerShell und führen Sie folgenden Befehl aus: netsh winhttp show proxy Wenn die Meldung „Direkter Zugriff (kein Proxyserver)“ erscheint, ist PowerShell noch nicht für die Verwendung Ihres Proxys konfiguriert. Bei manchen Konfigurationen übernimmt PowerShell sogar die IE-Einstellungen, wenn Sie diese importieren: netsh winhttp import proxy source=ie Das reicht oft aus, wenn Ihr Unternehmen Ihren PC bereits für die Verwendung der IE-Proxy-Einstellungen konfiguriert hat. Falls nicht oder falls das nicht funktioniert, können Sie Ihren Proxy manuell einrichten: netsh winhttp set proxy "192.168.0.14:3128" Ersetzen Sie die IP-Adresse und den Port durch Ihre tatsächliche Proxy-Adresse. Sie können auch eine Ausnahmeliste hinzufügen, damit lokale Adressen oder interne Websites nicht über den Proxy geleitet werden: netsh winhttp set proxy "192.168.0.14:3128" bypass-list="10.*, 172.*, 192.168.*, *.corp.domain" Überprüfen Sie anschließend erneut mit dem netsh winhttp show proxyBefehl. Sie weisen Windows damit an, ausgehende Webanfragen über diesen Proxy zu leiten. Das hilft, aber wenn Ihr Proxy eine Authentifizierung erfordert, treten die Fehler auf.
Umgang mit Proxy-Authentifizierung – Da der Standard-WebClient Ihre Proxy-Anmeldeinformationen ignoriert.
Hier liegt das Problem: Die typischen Webanforderungsklassen von PowerShell (insbesondere ältere Versionen) senden die Anmeldeinformationen des angemeldeten Benutzers nicht automatisch an den Proxy. Daher schlagen Befehle mit Fehlern wie „407 Proxy-Authentifizierung erforderlich“ oder ähnlichen fehl. Um dies zu beheben, müssen Sie Ihre Anmeldeinformationen explizit angeben: – Wenn Sie ein Domänenkonto verwenden und Ihr Proxy die Active Directory-Authentifizierung (NTLM oder Kerberos) unterstützt, können Sie Ihre aktuellen Anmeldeinformationen wiederverwenden: $Wcl = New-Object System. Net. WebClient $Wcl. Headers. Add("user-agent", "PowerShell Script") $Wcl. Proxy. Credentials = [System. Net. CredentialCache]::DefaultNetworkCredentials PowerShell verwendet dann Ihre aktuellen Anmeldeinformationen – ohne Passwortabfrage. Manchmal funktioniert dies jedoch nicht oder Ihr Proxy benötigt explizite Anmeldeinformationen. Führen Sie zur manuellen Eingabe folgenden Befehl aus: $Wcl = New-Object System. Net. WebClient $Creds = Get-Credential $Wcl. Proxy. Credentials = $Creds Dadurch wird eine Anmeldeaufforderung angezeigt. Nach der Konfiguration sollten Befehle wie Invoke-WebRequestoder Update-Helpfunktionieren, sofern der Proxy diese Anmeldeinformationen akzeptiert.– Bei PowerShell Core (6+) ist die Vorgehensweise etwas anders – es wird die HttpClient -Klasse verwendet, die Sie anders konfigurieren: [System. Net. Http. HttpClient]::DefaultProxy = New-Object System. Net. WebProxy('http://proxyserver:3128') [System. Net. Http. HttpClient]::DefaultProxy. Credentials = [System. Net. CredentialCache]::DefaultCredentials Sie können die Anmeldeinformationen auch interaktiv anfordern: [System. Net. Http. HttpClient]::DefaultProxy. Credentials = Get-Credential Hinweis: In vielen Fällen ist die globale Festlegung des DefaultProxy sehr hilfreich, manchmal müssen Sie den Proxy jedoch für jede Anfrage einzeln angeben.
Speichern Sie die Proxy-Einstellungen in Ihrem PowerShell-Profil – damit Sie diese nicht jedes Mal neu festlegen müssen.
Ja, die manuelle Konfiguration von Proxys für jede Sitzung wird schnell lästig. Um das zu automatisieren, können Sie diese Befehle zu Ihrem PowerShell-Profilskript hinzufügen. Führen Sie einfach Folgendes aus: notepad $PROFILE Oder, falls Sie dies für alle Benutzer durchführen, notepad $PROFILE. AllUsersCurrentHost fügen Sie Ihre Proxy-Konfigurationsbefehle hier ein, z. B.zum Konfigurieren von WebRequest oder WebProxy mit Anmeldeinformationen. Vor dem Ausführen der Skripte müssen Sie möglicherweise Ihre Ausführungsrichtlinie festlegen: Set-ExecutionPolicy RemoteSigned Nach dem Speichern starten Sie PowerShell einfach neu, und die Proxy-Konfiguration wird automatisch geladen. Das ist äußerst praktisch, wenn Sie häufig hinter dem Unternehmensproxy arbeiten und die Einrichtung nicht jedes Mal neu vornehmen möchten.
Überprüfung der Proxy-Konfiguration – So sehen Sie, was aktuell eingestellt ist
Möchten Sie überprüfen, ob Ihre Proxy-Einstellungen aktiv sind? Verwenden Sie: Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select-Object ProxyServer, ProxyEnable Wenn ProxyEnable auf 1 gesetzt ist, ist der Proxy aktiviert. Die tatsächliche Proxy-Adresse finden Sie unter ProxyServer. Um zu prüfen, ob Ihr System den Datenverkehr über den richtigen Proxy leitet, testen Sie: [System. Net. WebProxy]::GetDefaultProxy() Und um den Proxy einfach zu aktivieren oder zu deaktivieren: Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable -Value 1 oder Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable -Value 0 Beachten Sie, dass das Umschalten dieser Einstellungen andere Anwendungen beeinträchtigen kann. Führen Sie diese Schritte daher nur durch, wenn Sie damit einverstanden sind.
Ändern der Proxy-Einstellungen in Windows mit PowerShell – Denn manchmal braucht man eine dynamische Lösung.
Möchten Sie einen neuen Proxy direkt einrichten? Verwenden Sie eine Funktion wie diese: function Set-Proxy($server, $port) { if ((Test-NetConnection -ComputerName $server -Port $port).TcpTestSucceeded) { Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyServer -Value "$($server):$($port)" Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyEnable -Value 1 } else { Write-Error "Proxy server or port invalid: $($server):$($port)" } } Rufen Sie sie so auf: Set-Proxy 192.168.1.100 3128 Sie können auch Proxy-Ausnahmeadressen hinzufügen mit: $ProxyExceptionList = ";*.woshub.com;*.contoso.com" $ProxyProperty = Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" if ($ProxyProperty. ProxyOverride) { $OldValue = $ProxyProperty. ProxyOverride $NewValue = $OldValue + $ProxyExceptionList Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyOverride -Value $NewValue } else { Write-Warning "Proxy override list is empty!" } Und wenn Sie Ihren Proxy-Benutzernamen und Ihr Passwort speichern möchten – was *nicht* sehr sicher ist – können Sie diese in der Registry ablegen: Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyUser -Value "username" Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyPass -Value "password" —
Zusammenfassung
PowerShell hinter einem Unternehmensproxy reibungslos zum Laufen zu bringen, ist nicht ganz so einfach wie Plug-and-Play, aber mit etwas manuellem Aufwand durchaus machbar. Wichtig ist zu verstehen, dass PowerShell die Windows- oder WinHTTP-Proxy-Konfigurationen verwendet, nicht nur die des Browsers. Die globale Proxy-Einstellung, die korrekte Verarbeitung der Anmeldeinformationen und das optionale Speichern der Konfigurationen im Profil können später viel Ärger ersparen. Manchmal hat man zwar den Eindruck, Windows mache es einem unnötig schwer, aber diese Tipps führen in der Regel zu einer funktionierenden Einrichtung.
- Überprüfen Sie die aktuellen Proxy-Einstellungen mit
netsh winhttp show proxy. - Konfigurieren Sie es mit
netsh winhttp set proxy. - Die Anmeldeinformationen sollten über PowerShell-Befehle verwaltet werden, insbesondere wenn eine Proxy-Authentifizierung erforderlich ist.
- Speichern Sie Ihre bevorzugten Einstellungen zur einfacheren Handhabung in Ihrem PowerShell-Profil.
- Verwenden Sie Testbefehle wie diese,
Test-NetConnectionum die Konnektivität zu überprüfen.
Hoffentlich spart das jemandem, der Webanfragen reibungslos zum Laufen bringen möchte, ein paar Stunden. Denken Sie daran: Manchmal ist nach Änderungen an den systemweiten Proxy-Einstellungen ein Neustart des Computers oder der Sitzung erforderlich. Viel Erfolg!