ข้อผิดพลาดการติดตั้งโมดูล PowerShell: ไม่สามารถดาวน์โหลดจาก URI
ใน Windows รุ่นก่อนหน้า (Windows 8.1, Windows Server 2012 R2) คุณอาจเห็นข้อผิดพลาด ไม่สามารถดาวน์โหลดจาก URI เมื่อพยายามติดตั้งโมดูลจาก PowerShell Gallery โดยใช้ NuGet และ Install-Module cmdlet
ตัวอย่างเช่น เมื่อติดตั้งโมดูล Exchange Online PowerShell (EXOv2) คุณอาจเห็นข้อผิดพลาดการดาวน์โหลดผู้ให้บริการ PowershellGet และ NuGet ต่อไปนี้:
Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsersคำเตือน: ไม่สามารถดาวน์โหลดจาก URI - โมดูลติดตั้ง powershell
WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
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.
CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-PackageProvider], Exception + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackageProvider
Unable to find package provider 'NuGet'. It may not be imported yet. Try 'Get-PackageProvider -ListAvailable'.
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...PackageProvider:GetPackageProvider) [Get-PackageProvider], Exception
+ FullyQualifiedErrorId : UnknownProviderFromActivatedList,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackageProvider
+ CategoryInfo : InvalidOperation: (:) [Install-Module], InvalidOperationException
+ FullyQualifiedErrorId : CouldNotInstallNuGetProvider,Install-Moduleข้อผิดพลาดเดียวกันนี้จะปรากฏขึ้นเมื่อติดตั้งโมดูล PowerShell ผ่าน NuGet ไม่ว่าจะเป็น AzureAD, VMware PowerCLI, PSWindowsUpdate, SecretManagement, SQLServer เป็นต้น
ในกรณีนี้ คุณจะเห็นข้อผิดพลาด Schannel ที่มีรหัสเหตุการณ์ 36874 ใน Event Viewer -> บันทึกของระบบ
A TLS 1.2 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The TLS request has failed.ปัญหานี้เกิดขึ้นเมื่อ PowerShell พยายามเชื่อมต่อกับที่เก็บ NuGet โดยใช้โปรโตคอล TLS/SSL เดิมแทน TLS 1.2 ปัจจุบัน
ตรวจสอบเวอร์ชัน PowerShell ที่ติดตั้งบนคอมพิวเตอร์ของคุณ:
host|select versionหากเวอร์ชัน PowerShell ของคุณคือ 5.1.14xx หรือเก่ากว่า ให้อัปเดต
ตามค่าเริ่มต้น PowerShell รุ่นก่อนหน้าจะใช้ SSL 3.0 และ TLS 1.0 เพื่อสร้างการเชื่อมต่อ HTTPS ที่ปลอดภัยไปยังที่เก็บ
หากต้องการแสดงรายการโปรโตคอลที่ใช้สำหรับการเชื่อมต่อ ให้รันคำสั่งด้านล่าง:
[Net.ServicePointManager]::SecurityProtocol]Ssl3, Tlsในตัวอย่างของเรา PowerShell ใช้ SSL 3.0, TLS 1.0 หรือ TLS 1.1 รุ่นเก่า ที่เก็บ Microsoft ต้องการ TLS 1.2 หรือ TLS 1.3 จากลูกค้า
ในการเชื่อมต่อโดยใช้โปรโตคอล TLS 1.2 คุณต้องเรียกใช้คำสั่งต่อไปนี้:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
จากนั้นคุณสามารถติดตั้งโมดูล PowerShell โดยใช้โมดูลการติดตั้ง
เพื่อไม่ให้เปลี่ยนเวอร์ชันโปรโตคอลการเชื่อมต่อ HTTPS ด้วยตนเองในแต่ละครั้ง คุณสามารถตั้งค่า TLS 1.2 เป็นโปรโตคอลการเชื่อมต่อเริ่มต้นใน .NET Framework 4.5 (และใหม่กว่า) ในการดำเนินการนี้ คุณต้องทำการเปลี่ยนแปลงต่อไปนี้กับรีจิสทรีด้วยคำสั่ง:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWordรีสตาร์ทคอนโซล PowerShell ของคุณ แสดงรายการโปรโตคอลที่ใช้ได้:
[Net.ServicePointManager]::SecurityProtocolTls, Tls11, Tls12ตอนนี้ TLS 1.2 จะถูกใช้สำหรับการเชื่อมต่อ PowerShell เสมอ และคุณสามารถติดตั้งโมดูลใดก็ได้ด้วย NuGet


