Bilgisayarınızda sorunsuz çalışan bir betik sunucuya taşındı ya da artık bir fiyat listesini başka bir ülkeden bakan ziyaretçi gibi okuması gerekiyor; her Invoke-WebRequest çağrısı bir proxy üzerinden çıkmak zorunda. PowerShell'in bunun için parametreleri var. Yalnız bu parametreler Windows PowerShell 5.1 ile PowerShell 7'de farklı davranır ve en yaygın kestirme, user:pass@ bölümünü proxy adresinin içine yazmak, 5.1'de nedenini söylemeden 407 ile sonuçlanır.
Bu yazıda -Proxy ve -ProxyCredential parametrelerini, istem açmadan kimlik bilgisi oluşturmayı, proxy'yi her çağrı için bir kez tanımlamayı, ortam değişkenlerini ve Windows sistem proxy'sini, SOCKS5'i, yeniden deneme yapan bir indirme betiğini ve hata mesajlarının birebir metnini ele alıyoruz. 5.1 ile ilgili her kod parçasını Windows PowerShell 5.1 (derleme 26100) üzerinde, kullanıcı adı ve parola isteyen yerel bir proxy'ye karşı çalıştırdık. PowerShell 7 test makinesinde kurulu olmadığı için onun davranışı Microsoft belgelerinden alındı ve öyle işaretlendi.
Windows PowerShell 5.1 mi, PowerShell 7 mi: fark neden önemli?
İki sürüm web isteklerini farklı HTTP katmanlarıyla gönderir; bu yüzden aynı proxy ayarı birinde çalışırken öbüründe yok sayılabilir. Windows PowerShell 5.1 Windows ile birlikte gelir ve .NET Framework'ün HttpWebRequest sınıfını kullanır; PowerShell 7 ayrıca indirilir ve HttpClient kullanır. Bir betiğin hangisinde çalıştığını $PSVersionTable.PSVersion söyler.
| Davranış | Windows PowerShell 5.1 | PowerShell 7.x |
|---|---|---|
-Proxy, -ProxyCredential | Var | Var |
HTTP_PROXY, HTTPS_PROXY, NO_PROXY | Yok sayılır | 7.0'dan beri okunur |
| Proxy verilmediğinde | Kullanıcının Internet Seçenekleri | Önce değişkenler, sonra kullanıcı ayarı |
-NoProxy anahtarı | Yok | 6.0'dan beri |
| SOCKS5 adresi | Yok | 7.2 ve sonrası |
curl ve wget takma adları | Invoke-WebRequest'i gösterir | Kaldırıldı |
| Yerleşik yeniden deneme | Yok | -MaximumRetryCount |
5.1 sütunu bizim gözlemlerimizdir; 7.x sütunu PowerShell 7.5 için Invoke-WebRequest başvurusuna dayanır.
Invoke-WebRequest isteği proxy üzerinden nasıl gönderir?
- PowerShell hedefin değil, proxy'nin host adını çözer ve proxy portuna bir TCP bağlantısı açar.
http://hedefte URL'nin tamamını proxy'ye gönderir (GET http://httpbin.org/ip HTTP/1.1). Sayfayı proxy getirir ve size iletir; isteği okuyabilir.https://hedefteCONNECT httpbin.org:443gönderir. Proxy200 Connection Establishedile cevap verdikten sonra siteyle TLS el sıkışması bu tünelin içinde yapılır; proxy yalnız host adını ve portu görür.- Kimlik bilgisi ancak meydan okumadan sonra gider. İlk deneme
Proxy-Authorizationbaşlığı taşımaz, proxyProxy-Authenticate: Basicile407döner, .NET isteği başlıkla yineler. 407 durum kodu ve meydan okuma RFC 9110'da tanımlıdır; 5.1 ön kimlik doğrulama yapmadığı için test proxy'miz her başarılı çağrıyı şu ikili olarak kaydetti:
11:02:56 407 GET http://httpbin.org/ip (no Proxy-Authorization)
11:02:56 GET http://httpbin.org/ip user=user- Hedef, proxy'nin çıkış IP'sine cevap verir. Komut
StatusCode,HeadersveContentözellikleri olan bir nesne döndürür; 5.1'de 2xx dışındaki bir durum kodu nesne yerine sonlandırıcı hata olur.
Invoke-WebRequest ile proxy nasıl kullanılır?
Önce bir kimlik bilgisi nesnesi oluşturun, sonra proxy adresini ve nesneyi komuta verin:
$pass = ConvertTo-SecureString "pass" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("user", $pass)
$r = Invoke-WebRequest -UseBasicParsing -Uri "https://httpbin.org/ip" `
-Proxy "http://pr.proxynet.io:8000" -ProxyCredential $cred
$r | Select-Object StatusCode, StatusDescription | Format-List
$r.ContentStatusCode : 200
StatusDescription : OK
{
"origin": "203.0.113.42"
}httpbin.org/ip isteğin geldiği adresi döndürür; proxy çalışıyorsa orada sizin değil proxy'nin çıkış IP'si görünür. -Proxy değeri bir URI'dir ve hedef HTTPS olsa bile http:// şemasıyla yazılır: şema proxy ile kurulan bağlantıyı anlatır, sayfanın kendisi CONNECT tünelinin içinde şifreli kalır. İki parametre de Windows PowerShell 5.1 için Invoke-WebRequest sayfasında belgelenmiştir; sayfanın Türkçe sürümü aynı adreste tr-tr ile açılır.
5.1'de -UseBasicParsing anahtarını her zaman ekleyin. Anahtar olmadan komut HTML'i Internet Explorer motoruyla ayrıştırır ve Microsoft'un Aralık 2025'teki CVE-2025-54100 güvenlik güncelleştirmesinden beri önce onay ister; zamanlanmış bir betikte bu soruyu cevaplayacak kimse yoktur. Bizim çalıştırmamızda anahtarsız çağrı Nesne başvurusu bir nesnenin örneğine ayarlanmadı. hatasıyla düştü. PowerShell 7 yalnız temel ayrıştırma yapar ve anahtarı yok sayar.
Invoke-RestMethod aynı proxy parametrelerini alır; yanıt nesnesi yerine ayrıştırılmış JSON döndürür:
$ip = Invoke-RestMethod -Uri "https://api.ipify.org?format=json" `
-Proxy "http://pr.proxynet.io:8000" -ProxyCredential $cred
$ip.ipProxynet'in residential ve mobil ürünlerinde ülke, şehir ve oturum bilgisini panelin Endpoint Oluşturucu'sunda seçtiğiniz kullanıcı adı taşır; hangi çıkışı seçerseniz seçin komut aynı kalır.
Proxy kimlik bilgileri nasıl verilir?
Proxy parolası adresin içinde değil, bir PSCredential nesnesinde taşınır. Get-Credential bunu etkileşimli bir istemle sorar; betikte ise yukarıdaki gibi güvenli dizeden oluşturulur. Microsoft'un ConvertTo-SecureString sayfası komut satırına yazılan düz metin parolanın olay günlüklerine ve komut geçmişine düştüğü konusunda uyarıyor; parolayı betiğe yazmak yerine bir ortam değişkeninden ya da gizli anahtar deposundan okuyun:
$pass = ConvertTo-SecureString $env:PROXY_PASS -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($env:PROXY_USER, $pass)Testlerimizden üç ayrıntı:
-Proxyiçindekiuser:pass@5.1'de yok sayılır.-ProxyCredentialolmadan-Proxy "http://user:pass@pr.proxynet.io:8000"yazmak(407) Proxy Kimlik Doğrulaması Gerekliile bitti; proxy günlüğüne hiç kimlik bilgisi ulaşmadı.- Özel karakterler kodlama gerektirmez.
p@ss:w#rdbiçimindeki bir parolaPSCredentialüzerinden olduğu gibi geçti; URL biçiminde%40,%3Ave%23gerekirdi. - Web oturumu proxy'yi hatırlar.
-Proxy ... -SessionVariable sile yapılan ilk çağrıdan sonra yalnız-WebSession $sile yapılan ikinci çağrı yine proxy'den geçti; oturum nesnesi proxy'yi çerezlerin yanında saklar.
-ProxyUseDefaultCredentials ise PSCredential yerine oturum açmış Windows kullanıcısının hesabını gönderir; etki alanına göre kimlik doğrulayan şirket proxy'leri içindir ve belgeye göre -ProxyCredential ile birlikte kullanılamaz. Bu parametreyi test edemedik; proxy'miz yalnız Basic konuşuyor.
Makinenin IP adresini proxy panelinde yetkilendirdiğinizde parola tamamen ortadan kalkar: -Proxy "http://pr.proxynet.io:8000" ayarın tamamı olur. Proxynet en fazla 10 IP'lik bir whitelist kabul eder; sabit adresli bir sunucuda çalışan zamanlanmış işler için uygun yoldur.
Proxy her komut için nasıl tanımlanır?
$PSDefaultParameterValues, Komut:Parametre anahtarlarından oluşan bir hash tablosudur; parametreyi siz vermediğinizde PowerShell buradaki değeri uygular. Komut başına iki girdi yeter:
$PSDefaultParameterValues["Invoke-WebRequest:Proxy"] = "http://pr.proxynet.io:8000"
$PSDefaultParameterValues["Invoke-WebRequest:ProxyCredential"] = $cred
$PSDefaultParameterValues["Invoke-RestMethod:Proxy"] = "http://pr.proxynet.io:8000"
$PSDefaultParameterValues["Invoke-RestMethod:ProxyCredential"] = $cred
Invoke-RestMethod -Uri "https://api.ipify.org?format=json" # proxy uzerinden giderAnahtarlar joker karakter kabul eder; "Invoke-*:Proxy" iki komutu tek satırda kapsar ve iki biçim de testimizde çalıştı. Tablo her yeni oturumda boştur; satırları $PROFILE dosyasına koymadıkça kalıcı olmaz. Başka bir hesapla çalışan betik sizin profilinizi hiç görmez, bu yüzden başkasına vereceğiniz betikte parametreleri açıkça yazın.
Tek bir çağrıyı doğrudan göndermek için -Proxy $null yazmak, tabloda bir ProxyCredential varsayılanı durduğu sürece The cmdlet cannot run because the following parameter is missing: Proxy hatası verir. Onun yerine tabloyu bir anlığına kapatın: $PSDefaultParameterValues["Disabled"] = $true yazın, çağrıyı yapın, değeri $false yapın. Testimizde Disabled açıkken yapılan çağrı doğrudan gitti, bir sonraki yine proxy'den geçti.
PowerShell HTTP_PROXY ve HTTPS_PROXY değişkenlerini okur mu?
Windows PowerShell 5.1 okumaz. $env:HTTP_PROXY ve $env:HTTPS_PROXY tanımlıyken -Proxy vermeden yaptığımız istek doğrudan hedefe gitti; proxy isteği hiç görmedi. Aynı makinede curl.exe, git ve pip bu değişkenlere uyar; karışıklık buradan doğar.
PowerShell 7 ise belgesine göre okur: 7.0'dan beri komutlar varsayılan proxy'yi .NET'in HttpClient.DefaultProxy özelliğinden alır; bu özellik Windows'ta önce HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve istisna listesi NO_PROXY değişkenlerine bakar, değişkenler boşsa kullanıcının proxy ayarına döner.
# Yalniz PowerShell 7; 5.1 bunlari yok sayar
$env:HTTPS_PROXY = "http://pr.proxynet.io:8000"
$env:NO_PROXY = "localhost,127.0.0.1,.sirketici.example"
Invoke-WebRequest -Uri "https://httpbin.org/ip" # proxy uzerinden
Invoke-WebRequest -Uri "https://httpbin.org/ip" -NoProxy # yalniz bu cagri dogrudanKimlik bilgileri yine -ProxyCredential ile verilir; çağrı başına ya da $PSDefaultParameterValues üzerinden, 5.1'deki gibi.
Windows sistem proxy'si ve netsh winhttp ne olur?
-Proxy verilmediğinde 5.1 oturum açmış kullanıcının Internet Seçenekleri'ndeki proxy'ye döner; bu, Windows'un Ayarlar, Ağ ve İnternet, Proxy bölümünde gösterdiği ayardır. .NET Framework belgesi WebRequest.DefaultWebProxy özelliğinin önce uygulama yapılandırma dosyasını, o yoksa kullanıcının Internet Seçenekleri proxy'sini okuduğunu söyler. Birden beklenmedik bir proxy'den çıkan betik genellikle bu ayarı izliyordur; ayarın yerini Windows ve Chrome proxy ayarları yazısında gösteriyoruz.
Windows, servislerin ve sistem bileşenlerinin kullandığı HTTP kütüphanesi WinHTTP için ikinci ve ayrı bir proxy kaydı tutar. Bu kayıt netsh winhttp ile yönetilir ve .NET kullanan PowerShell komutlarını etkilemez. Aşağıdaki komutlar Microsoft'un netsh başvurusundan alındı; makine genelinde bir ayarı değiştirdikleri için burada çalıştırılmadı:
netsh winhttp show proxy
netsh winhttp set proxy proxy-server="pr.proxynet.io:8000" bypass-list="*.sirketici.example"
netsh winhttp import proxy source=ie
netsh winhttp reset proxyset proxy yalnız bir sunucu ve noktalı virgülle ayrılmış bir istisna listesi alır; kullanıcı adı ve parola isteyen bir proxy'yi betik içinde -ProxyCredential ile tanımlamak ya da IP whitelist ile parolasız hâle getirmek daha sağlıklıdır.
Betikte .NET sınıflarıyla proxy nasıl kullanılır?
System.Net.WebClient ya da HttpWebRequest sınıflarını doğrudan çağıran betikler -Proxy parametresini görmez; süreç genelindeki WebRequest.DefaultWebProxy değerini okurlar. Bu değeri bir kez ayarladığınızda o sınıflar ve 5.1'de kendi -Proxy değeri olmayan her Invoke-WebRequest çağrısı proxy'den geçer:
$proxy = New-Object System.Net.WebProxy("http://pr.proxynet.io:8000")
$proxy.Credentials = New-Object System.Net.NetworkCredential("user", "pass")
$proxy.BypassList = @("^http://intranet\.example\.")
[System.Net.WebRequest]::DefaultWebProxy = $proxy
(New-Object System.Net.WebClient).DownloadString("https://api.ipify.org")Ayar yalnız o PowerShell sürecinde yaşar. BypassList tam URL ile eşleştirilen düzenli ifadeler tutar; testimizde intranet deseni proxy dışında kaldı, genel adres ise proxy'den geçti.
WebProxy sınıfının bir kuralı bize bir saat kaybettirdi: localhost ya da 127.0.0.1 adresine giden istekler hiçbir zaman proxy kullanmaz. BypassProxyOnLocal değeri False iken bile IsBypassed ikisi için de True döndü; yerel bir web sunucusuna karşı yaptığımız her deneme doğrudan gitti ve proxy çalışıyormuş gibi göründü. Testi genel bir adrese karşı yapın ya da yerel sunucuya içinde nokta bulunan bir host adı verin.
Invoke-WebRequest SOCKS5 destekler mi?
Windows PowerShell 5.1'de desteklemez. -Proxy "socks5://pr.proxynet.io:1080" yazmak ServicePointManager, socks5 düzeninde proxy'leri desteklemiyor. hatasıyla durur; https:// şemalı proxy adresi de aynı hatayı verir, yani 5.1 proxy ile yalnız düz HTTP konuşur.
PowerShell 7.2 ve sonrası .NET 6 ya da daha yeni sürüm üzerinde çalışır; Microsoft'un .NET 6 ağ iyileştirmeleri duyurusu HttpClient için socks5:// adresiyle SOCKS4, SOCKS4a ve SOCKS5 desteğini belgeler. Komutun kendi başvuru sayfası SOCKS'tan söz etmez ve biz 7'yi burada çalıştıramadık; -Proxy "socks5://pr.proxynet.io:1080" yazımını kendi sürümünüzde doğrulamanız gereken bir seçenek olarak alın.
5.1'de pratik yol Windows 10 ve 11 ile gelen gerçek cURL'dür: curl.exe -x "socks5h://user:pass@pr.proxynet.io:1080" https://httpbin.org/ip; socks5h host adını proxy'nin çözmesini sağlar. Seçenekleri cURL ile proxy kullanımı yazısında anlattık; 1080 yerine endpoint oluşturucunun gösterdiği SOCKS5 portunu yazın.
Örnek: URL listesini proxy üzerinden yeniden denemeyle indirmek
Bu betik bir URL listesini proxy üzerinden indirir, geçici hataları artan bekleme süresiyle yeniden dener, 407'de hemen durur ve her URL için bir satır yazar. Yalnız Windows PowerShell 5.1 yeterlidir:
# fetch.ps1: listedeki her URL proxy uzerinden, yeniden denemeyle
$ErrorActionPreference = "Stop"
$ProxyUri = "http://pr.proxynet.io:8000"
$ProxyCred = New-Object System.Management.Automation.PSCredential (
"user", (ConvertTo-SecureString "pass" -AsPlainText -Force))
$urls = @(
"https://httpbin.org/ip",
"https://httpbin.org/status/503",
"https://httpbin.org/status/404",
"https://httpbin.org/headers"
)
$retryCodes = 408, 429, 500, 502, 503, 504
function Get-WithRetry {
param([string]$Url, [int]$Attempts = 4)
for ($i = 1; $i -le $Attempts; $i++) {
$sw = [System.Diagnostics.Stopwatch]::StartNew()
try {
$r = Invoke-WebRequest -UseBasicParsing -Uri $Url -Proxy $ProxyUri -ProxyCredential $ProxyCred -TimeoutSec 30
return [pscustomobject]@{ Url = $Url; Status = $r.StatusCode; Attempts = $i; Ms = $sw.ElapsedMilliseconds; Bytes = $r.RawContentLength }
} catch [System.Net.WebException] {
$code = 0
if ($_.Exception.Response) { $code = [int]$_.Exception.Response.StatusCode }
if ($code -eq 407) { throw "Proxy kimlik bilgisini reddetti (407). user:pass ya da IP whitelist'i kontrol edin." }
if (($code -in $retryCodes -or $code -eq 0) -and $i -lt $Attempts) {
$wait = [math]::Pow(2, $i - 1) # 1, 2, 4 saniye
Write-Warning "$Url -> $code ($($_.Exception.Status)); retry $i in $wait s"
Start-Sleep -Seconds $wait
continue
}
return [pscustomobject]@{ Url = $Url; Status = $code; Attempts = $i; Ms = $sw.ElapsedMilliseconds; Bytes = 0 }
}
}
}
$results = foreach ($u in $urls) { Get-WithRetry -Url $u }
$results | Format-Table -AutoSizeÇalıştırmamızda /status/503 adresi iki kez 503 döndü, 1 ve 2 saniye sonra yeniden denendi ve test sunucusu toparlandığı için üçüncü denemede başarılı oldu; 404 yeniden denenmeden geri geldi:
WARNING: https://httpbin.org/status/503 -> 503 (ProtocolError); retry 1 in 1 s
WARNING: https://httpbin.org/status/503 -> 503 (ProtocolError); retry 2 in 2 s
Url Status Attempts Ms Bytes
--- ------ -------- -- -----
https://httpbin.org/ip 200 1 34 55
https://httpbin.org/status/503 200 3 11 65
https://httpbin.org/status/404 404 1 3 0
https://httpbin.org/headers 200 1 10 250Üç tercih önemlidir. 5.1 başarısız isteğin durum kodunu yalnız $_.Exception.Response.StatusCode içinde verir, çünkü 4xx ya da 5xx cevap döndürülmez, hata olarak fırlatılır. $code değerinin 0 olması hiç cevap gelmediği, örneğin zaman aşımı olduğu anlamına gelir ve o da yeniden denenir. -TimeoutSec 30 tek denemeyi sınırlar; varsayılan 0 sonsuza kadar bekler. PowerShell 7'de -MaximumRetryCount 3 -RetryIntervalSec 2 yerleşiktir; belgesine göre Retry-After taşıyan bir 429 cevabı bu aralığı geçersiz kılar.
Her Invoke-WebRequest proxy'ye kendi bağlantısını açar; rotating gateway bu yüzden her çağrıya farklı bir çıkış IP'si verir. Girişin ardından birkaç sayfa gezen bir akış tersini ister: kullanıcı adındaki sticky oturum Residential Proxy üzerinde aynı IP'yi 1-60 dakika korur, -SessionVariable ise çerezleri sizin tarafınızda tutar.
PowerShell proxy betikleri nerelerde kullanılır?
Zamanlanmış görevler en sık karşılaşılan yerdir: gece çalışan bir iş kendi ürün listenizin fiyatını ve stok durumunu başka bir ülkedeki alıcının gördüğü hâliyle denetler; bir izleme betiği sitenizi birkaç bölgeden ister ve yanlış para birimi ya da dil gördüğünde uyarı verir; şirket proxy'sinin arkasındaki bir derleme sunucusu modülleri onun üzerinden kurar. Tek bir adrese izin veren bir iş ortağı API'sine, çıkışı hiç değişmeyen bir işten ulaşılır; ISP Proxy o işe yeniden başlatmalara dayanan adanmış bir IP verir.
Sık görülen PowerShell proxy hataları ve çözümleri
Mesajlar Türkçe Windows'ta Windows PowerShell 5.1'in bastığı hâliyle; .NET'ten gelen bölüm Türkçe, PowerShell'in kendi mesajları bizim makinede İngilizce çıktı.
Uzak sunucu hata döndürdü: (407) Proxy Kimlik Doğrulaması Gerekli.-ProxyCredentialverilmemiş, kimlik bilgisi adresin içine yazılmış, parola yanlış ya da IP adresi whitelist'te yok.catchbloğunda$_.Exception.Response.StatusCode.value__değeri407verir; nedenleri HTTP 407 Proxy Authentication Required hatası yazısında topladık.Uzak sunucuya bağlanılamıyorveStatus : ConnectFailure. Proxy portu yanlış, arada bir güvenlik duvarı var ya da proxy kapalı.Proxy adı çözülemedi: 'pr.proxynet.io'. Host adında yazım hatası var ya da DNS yok; mesaj hedefi değil proxy'yi adlandırır.The operation has timed out.-TimeoutSecproxy ile hedefin ihtiyacından kısa; 5 saniyede cevap veren bir sayfaya koyduğumuz 2 saniyelik sınır bu mesajı üretti. Metin Türkçe sistemde de İngilizce basıldı.ServicePointManager, socks5 düzeninde proxy'leri desteklemiyor.5.1'desocks5://ya dahttps://şemalı proxy adresi;http://, PowerShell 7.2+ ya dacurl.exekullanın.A parameter cannot be found that matches parameter name 'x'.5.1'de yazılmış bir cURL komutu;curloradaInvoke-WebRequest'in takma adıdır,curl.exeyazın.Nesne başvurusu bir nesnenin örneğine ayarlanmadı.Betikte-UseBasicParsingolmadan yapılan 5.1 çağrısı.The cmdlet cannot run because the following parameter is missing: Proxy.$PSDefaultParameterValueshâlâ birProxyCredentialtutarken-Proxy $nullyazılmış; onun yerineDisabledanahtarını kullanın.- Proxy sessizce atlanıyor. Hedef
localhostya da127.0.0.1, ya da betik 5.1'deHTTPS_PROXYdeğişkenine güveniyor.api.ipify.orgsonucunu-Proxyile ve-Proxyolmadan karşılaştırın.
Karar rehberi
| İhtiyaç | Öneri |
|---|---|
| Tek komutu proxy'den geçirmek | -Proxy ve -ProxyCredential |
| Oturumdaki her komut | $PROFILE içinde $PSDefaultParameterValues |
| Betikte parola olmasın | Panelde IP whitelist, yalnız -Proxy |
| Windows oturumuyla doğrulayan şirket proxy'si | -ProxyUseDefaultCredentials |
| Tek çağrı proxy'siz | -NoProxy (7) ya da Disabled anahtarı (5.1) |
| SOCKS5 | PowerShell 7.2+ ya da socks5h:// ile curl.exe |
WebClient ya da HttpWebRequest kodu | [System.Net.WebRequest]::DefaultWebProxy |
| Giriş akışı boyunca aynı çıkış IP'si | Kullanıcı adında sticky oturum |
| Servisler ve Windows Update | netsh winhttp set proxy |
Sıkça sorulan sorular
Invoke-WebRequest için proxy nasıl ayarlanır?
Komuta -Proxy "http://host:port" ekleyin; proxy parola istiyorsa yanına bir PSCredential nesnesiyle -ProxyCredential koyun. Aynı iki parametre Invoke-RestMethod komutunda ve PowerShellGet 2.x belgesine göre Install-Module komutunda da vardır.
Invoke-WebRequest neden 407 Proxy Authentication Required döndürür?
Çünkü proxy'ye kullanılabilir bir kimlik bilgisi ulaşmamıştır. 5.1'de bu, kullanıcı adı ve parola -ProxyCredential yerine adresin içine yazıldığında, parola yanlış olduğunda ya da proxy IP'nizi whitelist'te beklerken makinenin adresi değiştiğinde olur.
Invoke-WebRequest Windows proxy ayarlarını kullanır mı?
Evet, -Proxy vermediğinizde. Windows PowerShell 5.1 oturum açmış kullanıcının Internet Seçenekleri proxy'sini alır; PowerShell 7 önce HTTP_PROXY ve HTTPS_PROXY değişkenlerini okur, sonra kullanıcı ayarına döner. netsh winhttp ile tanımlanan WinHTTP proxy'si ayrı bir kayıttır ve ikisi tarafından da okunmaz.
PowerShell'de tek bir istek için proxy nasıl atlanır?
PowerShell 7'de o çağrıya -NoProxy ekleyin. 5.1'de -Proxy yazmayın; $PSDefaultParameterValues yine ekliyorsa çağrının çevresinde $PSDefaultParameterValues["Disabled"] = $true kullanın. Belirli host'ların tamamı için 7'de NO_PROXY, 5.1'de bir WebProxy nesnesinin BypassList özelliği kullanılır.
Invoke-WebRequest ile SOCKS5 proxy kullanılabilir mi?
Windows PowerShell 5.1'de kullanılamaz; socks5:// şemasını reddeder. PowerShell 7.2 ve sonrası HttpClient içinde SOCKS5 proxy'yi destekleyen .NET 6+ üzerinde çalışır; kendi sürümünüzde doğrulayın. 5.1'de onun yerine socks5h:// ile curl.exe çağırın.
PowerShell'in proxy'yi gerçekten kullandığı nasıl anlaşılır?
https://api.ipify.org adresini bir kez -Proxy olmadan, bir kez -Proxy ile isteyin: iki farklı adres görüyorsanız ve ikincisi proxy'nin ülkesindeyse proxy kullanılıyordur. Aynı adres iki kez çıkıyorsa çağrı doğrudan gitmiştir; en sık nedeni hedefin localhost olması ya da 5.1'in tanımladığınız değişkenleri yok saymasıdır.
Özet
Proxy'yi Invoke-WebRequest ve Invoke-RestMethod komutlarına -Proxy ve -ProxyCredential içindeki bir PSCredential ile verin, adresin içine değil; her çağrı proxy'den geçecekse ikisini $PSDefaultParameterValues ile bir kez tanımlayın. Windows PowerShell 5.1 HTTP_PROXY değişkenini yok sayar, Internet Seçenekleri'ne döner, loopback adreslerini proxy dışında bırakır ve SOCKS5 konuşamaz; PowerShell 7 değişkenleri okur, -NoProxy ve yeniden deneme ekler, 7.2'den itibaren SOCKS5 kabul eder. Her 5.1 betiğinde -UseBasicParsing ve -TimeoutSec bulunsun ve testi genel bir adrese karşı yapın. Tam olarak bu parametrelerle çalışan uç noktalar Proxynet proxy sayfasında.




