PowerShell, sistem yöneticileri ve geliştiriciler için güçlü bir otomasyon aracıdır. Modül tabanlı yapısı sayesinde dış kaynaklardan kolayca yeni yetenekler kazandırılabilir. Ancak bazı sistemlerde, özellikle de Windows Server 2016 ve benzeri eski sürümlerde, modül yükleme sırasında aşağıdaki gibi hatalarla karşılaşmak mümkündür;
WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409
WARNING: Unable to download the list of available providers. Check your internet connection.
PackageManagement\Install-PackageProvider : No match was found for the specified search criteria for the provider
'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package
has the tags.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7405 char:21
+ ... $null = PackageManagement\Install-PackageProvider -Name $script:N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
kageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
vider
PackageManagement\Import-PackageProvider : No match was found for the specified search criteria and provider name
'NuGet'. Try 'Get-PackageProvider -ListAvailable' to see if the provider exists on the system.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7411 char:21
+ ... $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (NuGet:String) [Import-PackageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
ider
Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'. The package
provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package has the tags.
At line:1 char:1
+ Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
kageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
vider
Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'.
Bu makalemde NuGet paket sağlayıcısının yüklenememesi sorununu detaylı şekilde ele alıp, bu durumun nedenlerini, geçici ve kalıcı çözüm yollarını açıklıyor olacağız.
PowerShell üzerinden bir modül yüklemeye çalıştığınızda şu tür uyarı ve hata mesajlarıyla karşılaşabilirsiniz:
Install-PackageProvider -Name NuGet -Force
Yaygın Hatalar:
Sağlayıcı indirilemedi:
WARNING: Unable to download the list of available providers. Check your internet connection.
NuGet bulunamıyor:
Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'.
Import sırasında başarısızlık;
Import-PackageProvider : No match was found for the specified search criteria and provider name 'NuGet'.
İnternete bağlı bir sistemde bile bu hataların alınmasının temel sebebi PowerShell’in güvenli bağlantı için doğru TLS (Transport Layer Security) sürümünü kullanamamasıdır.
Teknik Arka Plan
PowerShell’de Paket Sağlayıcılar Nasıl Çalışır?
- NuGet: PowerShell modüllerini PowerShell Gallery üzerinden indirmek için gerekli olan bir paket sağlayıcıdır.
- PowerShellGet: NuGet’i kullanarak modül yüklemeyi sağlayan PowerShell modülüdür.
- PackageManagement (OneGet): Alt yapıdaki yönetim katmanıdır.
TLS Protokolü Neden Önemlidir?
PowerShell, HTTPS üzerinden PowerShell Gallery gibi dış kaynaklara bağlanır. Ancak varsayılan PowerShell sürümleri (özellikle Windows Server 2016) sadece TLS 1.0 veya 1.1 kullanır.
Microsoft’un servisleri artık yalnızca TLS 1.2 ve üzeri bağlantıları kabul etmektedir. Dolayısıyla bağlantı başarısız olur, hata mesajı döner.
Adım Adım Çözüm
1. TLS 1.2’yi Etkinleştirin
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Bu komut .NET’in kullandığı bağlantı protokolünü TLS 1.2 olarak değiştirir. Etkisi sadece o oturum süresince geçerlidir.
2. NuGet Paket Sağlayıcısını Yükleyin
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Başarılı yüklemeden sonra aşağıdaki komutla kontrol edebilirsiniz:
Get-PackageProvider -Name NuGet
3. PowerShell Modülünü Yükleyin
Install-Module -Name PowerShellGet -Force
Ya da herhangi başka bir modül:
Install-Module -Name Az -Repository PSGallery -Force
Kalıcı Çözüm: TLS 1.2’yi Otomatikleştirme
TLS 1.2 ayarının her oturumda manuel girilmesini önlemek için aşağıdaki işlemi yapabilirsiniz:
PowerShell Profil Dosyasını Açın:
notepad $PROFILE
Aşağıdaki satırı ekleyin:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Bu sayede her PowerShell başlatıldığında TLS 1.2 varsayılan olur.
Alternatif: NuGet Paketini Manuel Olarak İndirme
Bazı sistemlerde dış dünyaya bağlantı yasaklı olabilir. Böyle bir durumda NuGet sağlayıcısını manuel indirip kurabilirsiniz:
- NuGet sağlayıcısını
.nupkg
dosyası olarak şu adresten indirin:
https://www.nuget.org/downloads - Dosyayı şu dizine kopyalayın:
C:\Program Files\PackageManagement\ProviderAssemblies
- PowerShell’i yönetici olarak çalıştırarak şu komutu girin:
Import-PackageProvider -Name NuGet
Kurumsal Sistemlerde Dikkat Edilmesi Gereken Noktalar
- Proxy yapılandırması gerekebilir. Proxy üzerinden bağlantı sağlanmıyorsa hata alınır.
netsh winhttp set proxy
komutu ile sistem genelinde proxy tanımlanabilir.- Güvenlik duvarı ya da içerik filtreleme sistemleri, PowerShell Gallery alan adlarını engelliyor olabilir.
PowerShell modülleri ile çalışmak için NuGet sağlayıcısının sorunsuz çalışması gerekir. Ancak eski sistemlerdeki TLS kısıtlamaları nedeniyle bu sağlayıcı indirilemeyebilir. Bu makalede anlatılan yöntemlerle:
- TLS 1.2’yi etkinleştirerek bağlantı problemleri çözülür
- NuGet yüklemesi başarıyla tamamlanır
- PowerShell Gallery erişimi yeniden sağlanır
Bu tür yapılandırma sorunlarıyla karşılaştığınızda sistemin internet erişimi, TLS ayarları ve proxy politikaları mutlaka kontrol edilmelidir.