Používání PowerShell přes proxy server s ověřením

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).

Profil PowerShell je skript, který se spustí při spuštění PowerShell.exe..

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

Zásady spouštění skriptů PowerShell Výchozí zásada spouštění skriptů PowerShell zakazuje spouštění všech skriptů PS, dokonce i ze souborů profilů PowerShell. Chcete-li povolit spouštění skriptů, musíte spustit příkaz:

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