Pokud vaše síť může přistupovat k Internetu pouze přes proxy server, nemůžete získat přístup k externím prostředkům z relace PowerShell: webové stránky (Invoke-WebRequest cmdlet), aktualizovat nápovědu pomocí Update-Help, připojit se k Office365 / Azure nebo Stáhněte si balíček s aplikací z externího úložiště balíků (pomocí PackageManagement nebo NanoServerPackage). V tomto článku pochopíme, jak přistupovat k Internetu z relace PowerShell prostřednictvím proxy serveru s ověřením.
Zkusme aktualizovat nápovědu Powershell:
Update-help
Nebo se podívejte na externí webovou stránku:
Invoke-WebRequest http://winitpro.ru
Pokud neexistuje přímý přístup k Internetu, příkaz vrátí chybu následujícího typu:
update-help: Nepodařilo se aktualizovat nápovědu pro moduly 'DhcpServer, DirectAccessClientComponents ....' s kulturami uživatelského rozhraní en-US: Nelze se připojit k obsahu nápovědy. Server, na kterém je uložen obsah nápovědy, nemusí být k dispozici. Ověřte, zda je server k dispozici, nebo počkejte, až se server vrátí do režimu online, a zkuste příkaz znovu.
Invoke-WebRequest: Nelze se připojit ke vzdálenému serveru
Faktem je, že Powershell (nebo spíše .NET třída) Systém.Net.Webclient, které všechny rutiny cmdlet používají k přístupu k externím prostředkům přes HTTP / HTTPS) nepoužívá nastavení systémového serveru proxy zadané v aplikaci Interent Explorer. Třída WebClient má však vlastnosti, které vám umožňují určit nastavení serveru proxy (WebClient.Proxy) a autorizační data na něm (WebClient.Credentials nebo WebClient.UseDefaultCredentials). Podívejme se, jak tyto vlastnosti třídy WebClient používat.
Nastavení proxy pro PowerShell od CMD
Zkontrolujte aktuální nastavení serveru proxy v relaci Powershell:
netsh winhttp show proxy
Jak vidíte, nastavení proxy není nastaveno..
Aktuální nastavení proxy serveru WinHTTP: Přímý přístup (žádný proxy server).
Nastavení serveru proxy můžete importovat z nastavení aplikace Internet Explorer:
netsh winhttp import proxy source = tj
nebo je nastavit ručně:
netsh winhttp nastavil proxy "192.168.0.14 ∗ 128"
Pokud se potřebujete přihlásit k proxy serveru, při provádění požadavků PowerShell se objeví chyby. “(407) Proxy Ověřování Povinné" Například při pokusu o připojení k vašemu předplatnému Azure příkazem:
Add-AzureAccount -Credential (Get-Credential)
Dostal jsem chybu:
Add-AzureAccount: user_realm_discovery_failed: Zjištění uživatelské sféry selhalo: Vzdálený server vrátil chybu: (407) Vyžaduje se ověření proxy.
Ověřování PowerShell Proxy
Zvažte dvě metody autorizace na proxy serveru: můžete použít autentizaci SSO nebo zadat jméno a uživatele pro ověření ručně.
Pokud jste v systému autorizováni pomocí doménového účtu a váš proxy server podporuje autentizaci Kerberos nebo NTLM Active Directory (pokud jste ji dosud nezakázali), můžete pro autentizaci na proxy serveru použít přihlašovací údaje aktuálního uživatele (není třeba zadávat jméno / heslo) ):
$ Wcl = new-object System.Net.WebClient
$ Wcl.Headers.Add („user-agent“, „PowerShell Script“)
$ Wcl.Proxy.Credentials =
[System.Net.CredentialCache] :: DefaultNetworkCredentials
Potřebujete-li se ručně ověřit pomocí proxy serveru, spusťte následující příkazy zadáním uživatelského jména a hesla do příslušného okna.
$ Wcl = New-Object System.Net.WebClient
$ Creds = Získejte pověření
$ Wcl.Proxy.Credentials = $ Creds
Nyní můžete zkusit přístup na externí web nebo aktualizovat nápovědu pomocí příkazu Aktualizovat nápovědu.
Jak vidíte, cmdlet Invoke-Web Request vrátil data ze stránky externího webu!
Nastavení proxy serveru v profilu PowerShell
Můžete vytvořit profil PowerShell pro automatické spuštění příkazů pro import proxy při spuštění PowerShell.
Chcete-li to provést, spusťte příkaz, který vytvoří soubor profilu ("C: \ Users \ username \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1
"):
zápisník $ PROFIL
(nebo poznámkový blok $ PROFILE.AllUsersCurrentHost
- pokud potřebujete použít profil PowerShell na všechny uživatele).
Zkopírujte požadovaný kód PowerShell do poznámkového bloku. Například pomocí souborů (Autoconfig) konfigurujete nastavení proxy serveru PAC. Můžete zadat adresu serveru pomocí souboru PAC a metodu ověřování na serveru proxy pod aktuálním uživatelem:
[system.net.webrequest] :: DefaultWebProxy = new-object system.net.webproxy ('http://192.168.1.90:80')
# můžete nahradit předchozí řádek za netsh winhttp import proxy source = tj. pokud chcete importovat nastavení proxy z Internet Exploreru
[system.net.webrequest] :: DefaultWebProxy.credentials = [System.Net.CredentialCache] :: DefaultNetworkCredentials
# může požadovat přihlašovací údaje uživatele
# System.Net.WebRequest] :: DefaultWebProxy.Credentials = Získat pověření
# můžete načíst uživatelské heslo ze souboru XML (viz článek o používání uložených hesel v PowerShell):
# System.Net.WebRequest] :: DefaultWebProxy = Import-Clixml -Path c: \ pc \ password.xml
[system.net.webrequest] :: DefaultWebProxy.BypassProxyOnLocal = $ true
Set-ExecutionPolicy RemoteSigned
Uložte soubor Microsoft.PowerShell_profile.ps1 a restartujte příkazový řádek PowerShell. Ujistěte se, že máte přístup k prostředkům na internetu z relace PowerShell přes proxy, aniž byste museli spouštět další příkazy.
Získejte nastavení serveru proxy z prostředí PowerShell
Aktuální nastavení proxy serveru můžete získat z registru příkazem PowerShell:
Get-ItemProperty - Cesta 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' | Select-Object ProxyServer, ProxyEnable
V mém příkladu adresa a port proxy serveru: 192.168.0.14 128
Proxy server je povolen: ProxyEnable = 1
Nastavení WebProxy můžete získat také takto:
[System.Net.WebProxy] :: GetDefaultProxy ()
V případě potřeby můžete povolit (zakázat) použití proxy pomocí následujících příkazů (respektive):
Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' ProxyEnable - value 1
a
Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' ProxyEnable - hodnota 0
Jak změnit nastavení proxy pomocí PowerShell?
Nastavení serveru proxy můžete nastavit pomocí prostředí PowerShell. Například následující funkce PowerShell umožňuje změnit nastavení proxy, ale nejprve zkontroluje dostupnost proxy serveru a portu na něm pomocí rutiny Test-NetConnection cmdlet
funkce Set-Proxy ($ server, $ port)
Pokud ((Test-NetConnection -ComputerName $ server - Port Port Port) .TcpTestSucceeded)
Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' -name ProxyServer -Value "$ ($ server): $ ($ port)"
Set-ItemProperty - Cesta 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' -name ProxyEnable -Value 1
Jinak
Error-Error -Message "Neplatné nastavení proxy: $ ($ server): $ ($ port)"
Set-Proxy 192.168.0.14 3128