A PowerShell használata proxykiszolgálón keresztül hitelesítéssel

Ha a hálózat csak proxykiszolgálón keresztül fér hozzá az internethez, akkor nem fér hozzá a PowerShell-munkamenethez tartozó külső erőforrásokhoz: egy weboldalhoz (Invoke-WebRequest parancsmag), a súgó frissítéséhez az Update-Help segítségével, csatlakozni az Office365 / Azure-hoz vagy Töltse le a csomagot egy alkalmazással egy külső csomagtárból (a PackageManagement vagy a NanoServerPackage használatával). Ebben a cikkben megértjük, hogyan lehet elérni az internetet a PowerShell munkamenetből egy proxykiszolgálón keresztül, hitelesítéssel.

Próbálja meg frissíteni a Powershell súgóját:

Update Súgó
Vagy hivatkozzon egy külső weboldalra:

Invoke-WebRequest http://winitpro.ru

Ha nincs közvetlen hozzáférés az internethez, akkor a parancs körülbelül a következő típusú hibát adja vissza:

frissítés-súgó: A (z) 'DhcpServer, DirectAccessClientComponents ....' modul (ok) súgójának frissítése nem sikerült. felhasználói felület kultúrájával en-US: Nem lehet csatlakozni a Súgó tartalomhoz. Előfordulhat, hogy a szerver, amelyen a Súgótartalom tárolódik, nem érhető el. Ellenőrizze, hogy a szerver elérhető-e, vagy várjon, amíg a szerver visszatér online, majd próbálja meg újra a parancsot.
Invoke-WebRequest: Nem lehet csatlakozni a távoli szerverhez

A tény az, hogy a Powershell (vagy inkább a .NET osztály  rendszer.nettó.webes, amelyet minden cmdlet használ a külső erőforrások elérésére HTTP / HTTPS útján), nem használja az Interent Explorerben megadott rendszerproxy-beállításokat. A WebClient osztálynak azonban vannak olyan tulajdonságai, amelyek lehetővé teszik a proxykiszolgáló-beállítások (WebClient.Proxy) és az azokon belüli engedélyezési adatok (WebClient.Credentials vagy WebClient.UseDefaultCredentials) meghatározását. Fontolja meg, hogyan lehet használni ezeket a WebClient osztály tulajdonságait.

Proxybeállítások a PowerDhellhez a CMD-ből

Ellenőrizze a rendszerproxy aktuális beállításait egy Powershell-munkamenetben:

netsh winhttp show proxy

Mint láthatja, a proxybeállítások nincsenek beállítva..

A WinHTTP proxy jelenlegi beállításai: Közvetlen hozzáférés (nincs proxy szerver).

Proxybeállításokat importálhat az Internet Explorer beállításaiból:

netsh winhttp import proxy forrás = azaz

vagy állítsa be kézzel:

A netsh winhttp proxy "192.168.0.14 ∗ 128" proxy

Ha be kell jelentkeznie a proxy szerverre, akkor hibák jelennek meg a PowerShell kérések végrehajtásakor. ”(407) meghatalmazott hitelesítés kötelező”. Például, amikor megpróbálja csatlakozni az Azure-előfizetéshez a következő paranccsal:

Add-AzureAccount -Credential (Get-Credential)

A hibát kapom:

Add-AzureAccount: user_realm_discovery_failed: A felhasználói tartomány felfedezése sikertelen: A távoli kiszolgáló hibát adott vissza: (407) Proxy-hitelesítés szükséges.

PowerShell Proxy-hitelesítés

Fontolja meg a proxykiszolgálón végzett két hitelesítési módszert: SSO hitelesítést használhat, vagy megadhat nevet és felhasználót a hitelesítéshez manuálisan.

Ha a rendszerben egy domain fiókkal rendelkezik jogosultsággal, és a proxy támogatja a Kerberos vagy az NTLM Active Directory hitelesítést (ha még nem tiltotta le), akkor a proxy szerver hitelesítéséhez felhasználhatja az aktuális felhasználó hitelesítő adatait (nem kell megadnia nevet / jelszót) ):

$ Wcl = új objektum System.Net.WebClient
$ Wcl.Headers.Add (“user-agent”, “PowerShell Script”)
$ Wcl.Proxy.Credentials =
[System.Net.CredentialCache] :: DefaultNetworkCredentials

Ha manuálisan hitelesítenie kell egy proxyszervert, akkor futtassa a következő parancsokat a felhasználói ablak és a jelszó megadásával a megfelelő ablakban.

$ Wcl = Új objektum System.Net.WebClient
$ Creds = Get-Credential
$ Wcl.Proxy.Credentials = $ Creds

Most megpróbálhat elérni egy külső webhelyet, vagy frissítheti a súgót az Update-Help paranccsal.

Mint láthatja, az Invoke-Web Request parancsmag visszaadta az adatokat a külső webhelyről!

Állítsa be a proxybeállításokat a PowerShell-profilban

Készíthet egy PowerShell-profilt, hogy automatikusan futtassa a proxy-importálási parancsokat a PowerShell indításakor.

Ehhez futtassa a profilt létrehozó parancsot ("C: \ Felhasználók \ felhasználónév \ Dokumentumok \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1„):

Jegyzettömb $ PROFILE (vagy Jegyzettömb $ PROFILE.AllUsersCurrentHost - ha minden felhasználónak PowerShell profilt kell alkalmaznia).

A PowerShell profil egy szkript, amely a PowerShell.exe indításakor fut..

Másolja a szükséges PowerShell-kódot a jegyzettömbbe. Például fájlokat (Autoconfig) használ a proxybeállítások konfigurálására a PAC kliensen. Megadhatja a kiszolgáló címét a PAC fájllal és a hitelesítési módszerrel a proxy kiszolgálón az aktuális felhasználó alatt:

[system.net.webrequest] :: DefaultWebProxy = new-object system.net.webproxy ('http://192.168.1.90:80')
# az előző sort kicserélheti a netsh winhttp import proxy source = azaz ha proxy beállításokat szeretne importálni az Internet Explorerből
[system.net.webrequest] :: DefaultWebProxy.credentials = [System.Net.CredentialCache] :: DefaultNetworkCredentials
# kérheti a felhasználói hitelesítő adatokat
# System.Net.WebRequest] :: DefaultWebProxy.Credentials = Get-Credential
# betölti a felhasználói jelszót egy XML fájlból (lásd a PowerShellben elmentett jelszavak használatáról szóló cikket):
# System.Net.WebRequest] :: DefaultWebProxy = Import-Clixml - Útvonal c: \ pc \ password.xml
[system.net.webrequest] :: DefaultWebProxy.BypassProxyOnLocal = $ true

PowerShell parancsfájl végrehajtási házirend Az alapértelmezett PowerShell végrehajtási házirend tiltja az összes PS szkript indítását, még a PowerShell profilfájlokból is. A szkriptek futtatásához a következő parancsot kell futtatnia:

Set-ExecutionPolicy RemoteSigned

Mentse a Microsoft.PowerShell_profile.ps1 fájlt, és indítsa újra a PowerShell parancssort. Győződjön meg arról, hogy a PowerShell-munkamenetből proxy segítségével hozzáférhet az internetes erőforrásokhoz, további parancsok futtatása nélkül.

Proxybeállításokat szerezhet a PowerShell-ből

A jelenlegi proxybeállításokat a nyilvántartásból a PowerShell paranccsal kaphatja meg:

Get-ItemProperty - A 'HKCU: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' elérési útja | Select Object ProxyServer, ProxyEnable

Példámban a proxy szerver címe és portja: 192.168.0.14:3128

Proxy szerver engedélyezve: ProxyEnable = 1

A WebProxy-beállításokat így kaphatja meg:

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

Szükség esetén engedélyezheti (letilthatja) a proxyk használatát a következő parancsokkal:

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

és

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

A proxybeállítások megváltoztatása a PowerShell segítségével?

A proxy beállításait a PowerShell segítségével állíthatja be. Például a következő PowerShell funkció lehetővé teszi a proxybeállítások megváltoztatását, de először a Test-NetConnection parancsmag segítségével ellenőrzi a proxyszerver és a rajta található port elérhetőségét.

Set-Proxy funkció ($ szerver, $ port)

If ((Tesztelje a NetConnection -ComputerName $ szervert -Port $ portot) .TcpTestSucceched)
Set-ItemProperty - A 'HKCU elérési útja: \ Szoftver \ Microsoft \ Windows \ CurrentVersion \ Internet Beállítások' -név ProxyServer -Érérték "$ ($ szerver): $ ($ port)"
Set-ItemProperty - 'HKCU elérési útja: \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings' -név ProxyEnable -Value 1

Else
Írási hiba - Üzenet "Érvénytelen proxybeállítások: $ ($ szerver): $ ($ port)"

Set-Proxy 192.168.0.14 3128