Korištenje PowerShell-a putem proxy poslužitelja s autentifikacijom

Ako vaša mreža može pristupati internetu samo putem proxy poslužitelja, tada ne možete pristupiti vanjskim resursima iz PowerShell sesije: web stranice (Invoke-WebRequest cmdlet), ažurirajte pomoć koristeći Update-Help, povežite se sa Office365 / Azure ili Preuzmite paket s aplikacijom iz vanjskog skladišta paketa (koristeći PackageManagement ili NanoServerPackage). U ovom ćemo članku razumjeti kako pristupiti Internetu iz PowerShell sesije putem proxy poslužitelja s autentifikacijom.

Pokušajmo ažurirati Powershell pomoć:

Update-pomoć
Ili pogledajte vanjsku web stranicu:

Invoke-WebRequest http://winitpro.ru

Ako nema izravnog pristupa Internetu, naredba će vratiti pogrešku otprilike sljedećeg tipa:

update-help: Nije uspjelo ažuriranje pomoći za module (module) "DhcpServer, DirectAccessClientComponents ...." s kulturama korisničkog sučelja en-US: Nije se moguće povezati s sadržajem pomoći. Poslužitelj na kojem je pohranjen sadržaj pomoći možda nije dostupan. Provjerite je li poslužitelj dostupan ili pričekajte da se poslužitelj vrati na mrežu, a zatim pokušajte naredbu ponovo.
Invoke-WebRequest: Nije se moguće povezati s udaljenim poslužiteljem

Činjenica je da je Powershell (ili bolje rečeno .NET klasa  sistem.neto.WebClient, koji svi cmdleti koriste za pristup vanjskim resursima putem HTTP / HTTPS) ne koristi postavke proxy sustava navedene u Interent Explorer-u. No, klasa WebClient ima svojstva koja vam omogućuju da odredite postavke proxy poslužitelja (WebClient.Proxy) i podatke o autorizaciji na njima (WebClient.Credentials ili WebClient.UseDefaultCredentials). Razmotrimo kako koristiti ova svojstva klase WebClient.

Postavke proxyja za PowerShell iz CMD-a

Provjerite trenutne postavke proxy sustava u Powershell sesiji:

netsh winhttp show proxy

Kao što vidite, postavke proxyja nisu postavljene..

Trenutačne postavke WinHTTP proxyja: Izravan pristup (nema proxy poslužitelja).

Postavke proxyja možete uvesti iz postavki Internet Explorer-a:

netsh winhttp import proxy source = tj

ili ih postavite ručno:

netsh winhttp set proxy "192.168.0.14 ∗ 128"

Ako se morate prijaviti na proxy poslužitelj, pri izvršavanju PowerShell zahtjeva pojavit će se pogreške. "(407) proxy ovjera potreban”. Na primjer, kada se pokušate povezati s pretplatom Azure pomoću naredbe:

Add-AzureAccount -Credential (Get-Credential)

Prihvaćam pogrešku:

Add-AzureAccount: user_realm_discovery_failed: Otkrivanje korisničkog područja nije uspjelo: Udaljeni poslužitelj vratio je pogrešku: (407) Potrebna provjera autentičnosti proxyja.

Provjera autentičnosti proxyja PowerShell

Razmotrite dvije metode autorizacije na proxy poslužitelju: možete koristiti SSO provjeru autentičnosti ili ručno odrediti ime i korisnika za autentifikaciju.

Ako ste ovlašteni u sustavu pod računom domene, a vaš proxy podržava Kerberos ili NTLM Active Directory provjeru autentičnosti (ako je još niste onemogućili), tada možete koristiti vjerodajnice trenutnog korisnika za provjeru autentičnosti na proxy poslužitelju (ne morate unositi ime / lozinku ):

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

Ako trebate ručno provjeriti autentičnost s proxy poslužiteljem, pokrenite sljedeće naredbe unošenjem korisničkog imena i lozinke u odgovarajući prozor.

$ Wcl = Novi objektni sistem.Net.WebClient
$ Creds = Dobivanje vjerodajnice
$ Wcl.Proxy.Credentials = $ Creds

Sada možete pokušati pristupiti vanjskoj web-lokaciji ili ažurirati pomoć naredbom Update-Help.

Kao što vidite, cmdlet Invoke-Web Request vratio je podatke sa stranice vanjske stranice!

Postavite proxy postavke u PowerShell profilu

Možete stvoriti PowerShell profil za automatsko pokretanje naredbi za uvoz proxy pri pokretanju PowerShell-a.

Da biste to učinili, pokrenite naredbu koja će stvoriti datoteku profila ("C: \ Korisnici \ korisničko ime \ Dokumenti \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1„):

bilježnica $ PROFIL (ili bilježnica $ PROFILE.AllUsersCurrentHost - ako trebate primijeniti PowerShell profil na sve korisnike).

PowerShell profil je skripta koja se pokreće kada se pokrene PowerShell.exe..

Kopirajte potreban PowerShell kôd u bilježnicu. Na primjer, za konfiguriranje postavki proxyja na PAC klijentu koristite datoteke (Autoconfig). Adresa poslužitelja možete odrediti s PAC datotekom i načinom provjere autentičnosti na proxy poslužitelju kod trenutnog korisnika:

[system.net.webrequest] :: DefaultWebProxy = novi objektni sistem.net.webproxy ('http://192.168.1.90:80')
# možete zamijeniti prethodni redak netsh winhttp import proxy source = tj. ako želite uvesti postavke proxyja iz Internet Explorera
[system.net.webrequest] :: DefaultWebProxy.credentials = [System.Net.CredentialCache] :: DefaultNetworkCredentials
# može zatražiti vjerodajnice korisnika
# System.Net.WebRequest] :: ZadaniWebProxy.Credentials = Pristupna vjerodajnica
# možete učitati korisničku lozinku iz XML datoteke (pogledajte članak o korištenju spremljenih zaporki u PowerShellu):
# System.Net.WebRequest] :: DefaultWebProxy = Uvezi-Clixml -Path c: \ pc \ password.xml
[system.net.webrequest] :: ZadaniWebProxy.BypassProxyOnLocal = $ true

Pravila izvršavanja skripta PowerShell Zadana pravila izvršavanja PowerShell zabranjuju pokretanje svih PS skripti, čak i iz datoteka profila PowerShell. Da biste dozvolili pokretanje skripti, morat ćete pokrenuti naredbu:

Set-ExecutionPolicy RemoteSigned

Spremite datoteku Microsoft.PowerShell_profile.ps1 i ponovno pokrenite naredbeni redak PowerShell. Provjerite možete li pristupiti resursima na Internetu iz PowerShell sesije putem proxyja bez potrebe za pokretanjem dodatnih naredbi.

Nabavite postavke proxyja iz PowerShell-a

Trenutne postavke proxyja možete dobiti iz registra pomoću naredbe PowerShell:

Get-ItemProperty -Path 'HKCU: \ Softver \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' | Select-Object ProxyServer, ProxyEnable

U mom primjeru, adresa i port proxy poslužitelja: 192.168.0.14:3128

Omogućen je proxy poslužitelj: ProxyEnable = 1

Možete dobiti i WebProxy postavke poput ove:

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

Ako je potrebno, možete omogućiti (onemogućiti) upotrebu proxyja sa sljedećim naredbama (respektivno):

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

i

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

Kako promijeniti postavke proxyja putem PowerShell-a?

Postavke proxyja možete postaviti pomoću PowerShell-a. Na primjer, sljedeća funkcija PowerShell omogućuje vam promjenu postavki proxyja, ali najprije provjerava dostupnost proxy poslužitelja i priključka na njemu pomoću cmdleta Test-NetConnection

funkcija Set-Proxy ($ server, $ port)

Ako ((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' -ime ProxyEnable -Value 1

Ostalo
Write-Error -Message "Nevažeće postavke proxyja: $ ($ server): $ ($ port)"

Set-Proxy 192.168.0.14 3128