Uporaba programa PowerShell prek proxy strežnika s preverjanjem pristnosti

Če lahko vaše omrežje do interneta dostopa le prek proxy strežnika, do zunanjih virov ne morete dostopati s sejo PowerShell: spletna stran (Invoke-WebRequest cmdlet), posodobite pomoč z Update-Help, povežite se s Office365 / Azure ali Prenesite paket z aplikacijo iz zunanjega skladišča paketov (z uporabo PackageManagement ali NanoServerPackage). V tem članku bomo razumeli, kako do dostopa do interneta iz PowerShell seje prek proxy strežnika s preverjanjem pristnosti.

Poskusimo posodobiti pomoč Powershell:

Posodobitev-pomoč
Ali pa poglejte zunanjo spletno stran:

Invoke-WebRequest http://winitpro.ru

Če neposrednega dostopa do interneta ni, bo ukaz vrnil napako približno naslednje vrste:

update-help: Ni uspelo posodobiti pomoči za module (module) „DhcpServer, DirectAccessClientComponents ....“ s kulturo (-i) uporabniškega vmesnika en-US: Ni se mogoče povezati z vsebino pomoči. Strežnik, na katerem je shranjena vsebina pomoči, morda ni na voljo. Preverite, ali je strežnik na voljo, ali počakajte, da se strežnik vrne v splet, in nato poskusite znova.
Invoke-WebRequest: Ni mogoče povezati z oddaljenim strežnikom

Dejstvo je, da je Powershell (ali bolje rečeno .NET razred  Sistem.Neto.Webclient, ki jih vsi cmdleti uporabljajo za dostop do zunanjih virov prek HTTP / HTTPS) ne uporablja sistemskih nastavitev proxyja, določenih v Interent Explorerju. Vendar pa ima razred WebClient lastnosti, ki vam omogočajo, da določite nastavitve proxy strežnika (WebClient.Proxy) in podatke o avtorizaciji na njem (WebClient.Credentials ali WebClient.UseDefaultCredentials). Razmislimo, kako uporabiti te lastnosti razreda WebClient.

Nastavitve proxyja za PowerShell iz CMD

Preverite trenutne nastavitve sistemskih strežnikov v seji Powershell:

netsh winhttp show proxy

Kot vidite, nastavitve proxyja niso nastavljene..

Trenutne nastavitve proxy WinHTTP: Neposreden dostop (brez proxy strežnika).

Nastavitve proxyja lahko uvozite iz nastavitev Internet Explorerja:

netsh winhttp import proxy source = tj

ali jih nastavite ročno:

netsh winhttp set proxy "192.168.0.14 ∗ 128"

Če se morate prijaviti na proxy strežnik, se bodo pri izvajanju zahtev PowerShell pojavile napake. "(407) Proxy Preverjanje pristnosti Obvezno" Na primer, ko se poskusite povezati s svojo naročnino Azure z ukazom:

Add-AzureAccount -Credential (Get-poverilnica)

Poiščem napako:

Add-AzureAccount: user_realm_discovery_failed: Odkrivanje uporabniškega prostora ni uspelo: Oddaljeni strežnik je vrnil napako: (407) Zahteva se overjanje proxyja.

Preverjanje pristnosti proxy PowerShell

Razmislite o dveh načinih avtorizacije na proxy strežniku: lahko uporabite overjanje SSO ali ročno določite ime in uporabnika za avtentikacijo.

Če ste v sistemu pooblaščeni pod domenskim računom in vaš proxy podpira Kerberos ali overjanje NTLM Active Directory (če ga še niste onemogočili), lahko uporabite pooblastila trenutnega uporabnika za preverjanje pristnosti na proxy strežniku (ni vam potrebno vnašati imena / gesla ):

$ Wcl = novi objekt System.Net.WebClient
$ Wcl.Headers.Add ("uporabniški agent", "PowerShell Script")
$ Wcl.Proxy.Credentials =
[System.Net.CredentialCache] :: DefaultNetworkCredentials

Če se želite ročno overiti s proxy strežnikom, zaženite naslednje ukaze, tako da v ustrezno okno vpišete uporabniško ime in geslo..

$ Wcl = New-Object System.Net.WebClient
$ Creds = Pridobivanje poverilnic
$ Wcl.Proxy.Credentials = $ Creds

Zdaj lahko poskusite dostopati do zunanjega spletnega mesta ali posodobiti pomoč z ukazom Update-Help.

Kot vidite, je cmdlet Invoke-Web Request vrnil podatke s strani zunanjega spletnega mesta!

Nastavite nastavitve proxyja v profilu PowerShell

Profil PowerShell lahko ustvarite za samodejno izvajanje uvozov za uvoz proxy pri zagonu PowerShell-a.

Če želite to narediti, zaženite ukaz, ki bo ustvaril datoteko profila ("C: \ Uporabniki \ uporabniško ime \ Dokumenti \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1"):

beležnica $ PROFIL (ali beležnica $ PROFILE.AllUsersCurrentHost - če morate uporabiti profil PowerShell za vse uporabnike).

Profil PowerShell je skript, ki se zažene, ko se zažene PowerShell.exe..

Kopirajte zahtevano kodo PowerShell v beležko. Na primer, uporabite datoteke (Autoconfig) za konfiguriranje nastavitev proxyja na odjemalcu PAC. Naslov strežnika lahko določite z datoteko PAC in načinom preverjanja pristnosti na proxy strežniku pri trenutnem uporabniku:

[system.net.webrequest] :: DefaultWebProxy = sistem-novi objekt.net.webproxy ('http://192.168.1.90:80')
# lahko prejšnjo vrstico zamenjate z netsh winhttp import proxy source = tj. če želite uvoziti nastavitve proxy iz Internet Explorerja
[system.net.webrequest] :: DefaultWebProxy.credentials = [System.Net.CredentialCache] :: DefaultNetworkCredentials
# lahko zahteva uporabniške poverilnice
# System.Net.WebRequest] :: DefaultWebProxy.Credentials = Pridobivanje poverilnic
# lahko uporabniško geslo naložite iz datoteke XML (glejte članek o uporabi shranjenih gesel v PowerShellu):
# System.Net.WebRequest] :: DefaultWebProxy = Uvozi-Clixml -Path c: \ pc \ password.xml
[system.net.webrequest] :: PrivzetoWebProxy.BypassProxyOnLocal = $ true

Politika izvajanja skriptov PowerShell Privzeta politika izvajanja PowerShell prepoveduje zagon vseh skriptov PS, tudi iz datotek profila PowerShell. Če želite pustiti skripte za zagon, morate zagnati ukaz:

Set-ExecutionPolicy RemoteSigned

Shranite datoteko Microsoft.PowerShell_profile.ps1 in znova zaženite ukazni poziv PowerShell. Prepričajte se, da lahko do virov v internetu dostopate prek PowerShell-ove seje prek proxyja, ne da bi morali zagnati dodatne ukaze.

Pridobite nastavitve proxyja iz PowerShell-a

Trenutne nastavitve proxyja lahko iz registra pridobite z ukazom PowerShell:

Get-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' | Izberite-objekt ProxyServer, ProxyEnable

V mojem primeru sta naslov in vrata strežnika proxy: 192.168.0.14 128

Proxy strežnik je omogočen: ProxyEnable = 1

Lahko dobite tudi naslednje nastavitve WebProxy:

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

Po potrebi lahko omogočite (onemogočite) uporabo proxy z naslednjimi ukazi (oziroma):

Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' ProxyEnable -value 1

in

Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' ProxyEnable -value 0

Kako spremeniti nastavitve proxyja prek PowerShell-a?

Nastavitve proxy lahko nastavite s programom PowerShell. Naslednja funkcija PowerShell vam omogoča, da spremenite nastavitve proxyja, vendar najprej preveri razpoložljivost proxy strežnika in vrat na njem s pomočjo ukaznega okna Test-NetConnection

funkcija Set-Proxy ($ server, $ port)

Če ((Test-NetConnection -ComputerName $ server -Port $ port) .TcpTestSucceeded)
Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' -ime ProxyServer -Value "$ ($ strežnik): $ ($ port)"
Set-ItemProperty -Path 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' -ime ProxyEnable -Value 1

Ostalo
Write-Error -Message "Neveljavne nastavitve proxyja: $ ($ server): $ ($ port)"

Set-Proxy 192.168.0.14 3128