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