Používanie PowerShell cez proxy server s autentifikáciou

Ak má vaša sieť prístup na internet iba cez proxy server, potom nemôžete získať prístup k externým zdrojom z relácie PowerShell: webová stránka (Invoke-WebRequest cmdlet), aktualizovať pomoc pomocou Update-Help, pripojiť sa k Office365 / Azure alebo Stiahnite si balík s aplikáciou z externého archívu balíkov (pomocou PackageManagement alebo NanoServerPackage). V tomto článku pochopíme, ako pristupovať na internet z relácie PowerShell prostredníctvom proxy servera s overením.

Skúsme aktualizovať pomocníka Powershell:

Update-Help
Alebo si pozrite externú webovú stránku:

Invoke-WebRequest http://winitpro.ru

Ak neexistuje priamy prístup na internet, príkaz vráti chybu približne nasledujúceho typu:

update-help: Nepodarilo sa aktualizovať pomoc pre moduly 'DhcpServer, DirectAccessClientComponents ....' s kultúrami používateľského rozhrania en-US: Nedá sa pripojiť k obsahu Pomocníka. Server, na ktorom je uložený obsah Pomocníka, nemusí byť k dispozícii. Skontrolujte, či je server k dispozícii, alebo počkajte, kým sa server nevráti do režimu online, a potom skúste príkaz znova.
Invoke-WebRequest: Nedá sa pripojiť k vzdialenému serveru

Faktom je, že Powershell (alebo skôr .NET trieda)  systém.netto.WebClient, ktoré všetky rutiny cmdlet používajú na prístup k externým zdrojom prostredníctvom protokolu HTTP / HTTPS) nepoužíva nastavenia systémového servera proxy uvedené v programe Interent Explorer. Trieda WebClient má však vlastnosti, ktoré vám umožňujú zadať nastavenia proxy servera (WebClient.Proxy) a autorizačné údaje na nej (WebClient.Credentials alebo WebClient.UseDefaultCredentials). Uvažujme, ako používať tieto vlastnosti triedy WebClient.

Nastavenia proxy servera PowerShell od CMD

Skontrolujte aktuálne nastavenia servera proxy v relácii Powershell:

netsh winhttp show proxy

Ako vidíte, nastavenia proxy nie sú nastavené..

Aktuálne nastavenia proxy servera WinHTTP: Priamy prístup (bez servera proxy).

Nastavenia servera proxy môžete importovať z nastavení programu Internet Explorer:

netsh winhttp import proxy zdroja = napr

alebo ich nastaviť ručne:

Netsh winhttp nastavil proxy "192.168.0.14 ∗ 128"

Ak sa potrebujete prihlásiť na server proxy, pri vykonávaní požiadaviek programu PowerShell sa objavia chyby. “(407) zastupovanie overenie pravosti potrebný". Napríklad, keď sa pokúsite pripojiť k odberu Azure pomocou príkazu:

Add-AzureAccount - poverenie (Get-Credential)

Zobrazila sa mi chyba:

Add-AzureAccount: user_realm_discovery_failed: Zisťovanie sféry používateľa zlyhalo: Vzdialený server vrátil chybu: (407) Vyžaduje sa overenie servera proxy.

Overenie servera PowerShell Proxy

Zvážte dve metódy autorizácie na serveri proxy: môžete použiť autentifikáciu SSO alebo manuálne zadať meno a používateľa na autentifikáciu.

Ak ste v systéme autorizovaní pod účtom domény a váš proxy server podporuje autentifikáciu Kerberos alebo NTLM Active Directory (ak ste ju ešte nezakázali), môžete na overenie proxy servera použiť poverenia aktuálneho používateľa (nemusíte zadávať meno / heslo) ):

$ Wcl = new-object System.Net.WebClient
$ Wcl.Headers.Add („user-agent“, „PowerShell Script“)
$ Wcl.Proxy.Credentials =
[System.Net.CredentialCache] :: DefaultNetworkCredentials

Ak potrebujete ručne overiť pomocou servera proxy, spustite nasledujúce príkazy zadaním používateľského mena a hesla v zodpovedajúcom okne.

$ Wcl = New-Object System.Net.WebClient
$ Kredity = Získajte poverenie
$ Wcl.Proxy.Credentials = $ Creds

Teraz sa môžete pokúsiť získať prístup na externú webovú stránku alebo aktualizovať pomoc pomocou príkazu Update-Help.

Ako vidíte, cmdlet Invoke-Web Request vrátil údaje zo stránky externých stránok!

Nastavte nastavenia servera proxy v profile PowerShell

Môžete vytvoriť profil PowerShell na automatické spúšťanie príkazov na import proxy pri spustení PowerShell.

Spustite príkaz, ktorý vytvorí súbor profilu („“C: \ Users \ username \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1"):

Poznámkový blok $ PROFIL (alebo poznámkový blok $ PROFILE.AllUsersCurrentHost - ak potrebujete použiť profil PowerShell na všetkých používateľov).

Profil PowerShell je skript, ktorý sa spustí pri spustení programu PowerShell.exe..

Skopírujte požadovaný kód PowerShell do poznámkového bloku. Napríklad pomocou súborov (Autoconfig) konfigurujete nastavenia servera proxy na klientovi PAC. Adresa servera môžete zadať pomocou súboru PAC a metódou autentifikácie na serveri proxy pod aktuálnym používateľom:

[system.net.webrequest] :: DefaultWebProxy = new-object system.net.webproxy ('http://192.168.1.90:80')
# môžete nahradiť predchádzajúci riadok zdrojom netsh winhttp import proxy source = tj ak chcete importovať nastavenia servera proxy z prehliadača Internet Explorer
[system.net.webrequest] :: DefaultWebProxy.credentials = [System.Net.CredentialCache] :: DefaultNetworkCredentials
# môže požadovať poverenia užívateľa
# System.Net.WebRequest] :: DefaultWebProxy.Credentials = Získať oprávnenie
# môžete načítať užívateľské heslo zo súboru XML (pozrite si článok o používaní uložených hesiel v PowerShell):
# System.Net.WebRequest] :: DefaultWebProxy = Import-Clixml - Cesta c: \ pc \ password.xml
[system.net.webrequest] :: DefaultWebProxy.BypassProxyOnLocal = $ true

Pravidlá vykonávania skriptov PowerShell Predvolená zásada vykonávania skriptov PowerShell zakazuje spúšťanie všetkých skriptov PS, dokonca aj zo súborov profilov PowerShell. Ak chcete povoliť spúšťanie skriptov, musíte spustiť príkaz:

Set-ExecutionPolicy RemoteSigned

Uložte súbor Microsoft.PowerShell_profile.ps1 a reštartujte príkazový riadok PowerShell. Uistite sa, že k prostriedkom na Internete máte prístup z relácie PowerShell cez proxy bez potreby spúšťania ďalších príkazov.

Získajte nastavenia servera proxy z prostredia PowerShell

Aktuálne nastavenia servera proxy môžete získať z registra pomocou príkazu PowerShell:

Get-ItemProperty - Cesta 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' | Vyberte objektový ProxyServer, ProxyEnable

V mojom príklade adresa a port proxy servera: 192.168.0.14:3128

Proxy server je povolený: ProxyEnable = 1

Môžete tiež získať nastavenia WebProxy takto:

[System.Net.WebProxy] :: GetDefaultProxy ()

V prípade potreby môžete povoliť (zakázať) používanie serverov proxy pomocou nasledujúcich príkazov (v danom poradí):

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

Ako zmeniť nastavenia servera proxy pomocou prostredia PowerShell?

Nastavenia servera proxy môžete nastaviť pomocou programu PowerShell. Napríklad nasledujúca funkcia PowerShell vám umožňuje zmeniť nastavenia proxy, ale najskôr skontroluje dostupnosť proxy servera a portu na ňom pomocou cmdlet Test-NetConnection.

funkcia Set-Proxy ($ server, $ port)

If ((Test-NetConnection -ComputerName $ server -Port $ port) .TcpTestSucceeded)
Set-ItemProperty - Cesta '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

Inak
Chyba pri zápise - správa „Neplatné nastavenia servera proxy: $ ($ server): $ ($ port)“

Set-Proxy 192.168.0.14 3128