85

I followed the steps mentioned in Using PowerShell Behind a Proxy to configure my proxy server.

netsh winhttp set proxy "[IP]:[Port]"
$Wcl = New-Object System.Net.WebClient
$Creds = Get-Credential
$Wcl.Proxy.Credentials = $Creds

A dialog popped up to collect my credential on the third line.

Then I tried to install NuGet:

PS C:\Users\Administrator> Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
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.
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-PackageProvider], Exception
    + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackageProvider

The error message seems to indicate my PowerShell cannot connect to internet, but when I tried this command:

PS C:\Users\Administrator> Invoke-WebRequest "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409"

StatusCode        : 200
StatusDescription : OK
Content           : <?xml version="1.0" encoding="utf-8"?>
                    <SoftwareIdentity xmlns="http://standards.iso.org/iso/19770/-2/2015/schema.xsd"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:discovery="http://p...
RawContent        : HTTP/1.1 200 OK
                    Content-MD5: 01uMBNqAHedJsS1dqKC5oA==
                    Vary: Accept-Encoding
                    X-Cache: HIT
                    x-ms-blob-type: BlockBlob
                    x-ms-lease-status: unlocked
                    x-ms-request-id: 1b7af5a7-901e-0003-5d94-f5cc950000...
Forms             : {}
Headers           : {[Content-MD5, 01uMBNqAHedJsS1dqKC5oA==], [Vary, Accept-Encoding], [X-Cache, HIT],
                    [x-ms-blob-type, BlockBlob]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : System.__ComObject
RawContentLength  : 1847

It seems it can connect to the Internet after all.

What did I do wrong? How do I install NuGet?

1
  • @OcasoProtal I tried accessing the Microsoft URL in browser while I was having issues. The URL could be loaded successfully, it was a XML file containing URLs. Commented Apr 25, 2019 at 0:44

5 Answers 5

236

It could be TLS security related (ref: https://rnelson0.com/2018/05/17/powershell-in-a-post-tls1-1-world/)

Try this command first:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

then try to do the update.

Note: the command only affects the current session and does not persist.

You may also check what version of TLS for client is set on computer. Looks like TLS 1.0 for client is required. (ref: https://powershell.org/forums/topic/wmf-5-1-upgrade-broken-repositories/)

Sign up to request clarification or add additional context in comments.

Comments

27

I had the same problem today. My issue was PowerShell Gallery would not download anything on Windows Server 2016 environments:

Downloading package 'AzureRM.BootStrapper' failed, please make sure 'https://www.powershellgallery.com/api/v2/package/AzureRM.BootStrapper/0.5.0' is accessible.

WARNING: Source Location 'https://www.powershellgallery.com/api/v2/package/AzureRM.BootStrapper/0.5.0' is not valid.

What helped me to find out it was TLS v1.2 was this error in Fiddler:

System.Security.Authentication.AuthenticationException A call to SSPI failed, see inner exception

Then I fixed it with the same solution as Michael Cohoon's answer.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

You can set it for the whole .NET framework by editing registry:

# Set strong cryptography on 64 bit .Net Framework (version 4 and above)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord


# Set strong cryptography on 32 bit .Net Framework (version 4 and above)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord 

Commands thanks to: https://johnlouros.com/blog/enabling-strong-cryptography-for-all-dot-net-applications

2 Comments

This is now mentioned at devblogs.microsoft.com/powershell/…
[Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 adds tls12 to existing sec protocols instead of overridding. works good too
10

Try this:

[System.Net.WebRequest]::DefaultWebProxy.Credentials = System.Net.CredentialCache]::DefaultCredentials

If the above doesn't work try this:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Comments

1

Having taken many steps to overcome the similar problem, I just wanted to document the process in a more clear way. Here are the steps to overcome problems of NuGet and Docker installation in Windows Server (tested in 2016):

  1. Make sure that Powershell version is 5.1 or higher: Get-Host | Select-Object Version

  2. Update SSL/TLS versions supported by the server:

x64: Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

x32: Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

  1. Restart the Powershell and check whether the desired effect is achieved: [Net.ServicePointManager]::SecurityProtocol

(You should now see semeting like this:) Tls, Tls11, Tls12, etc.

  1. Install NuGet: Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

  2. Install Docker: Install-Module -Name DockerMsftProvider -Force Install-Package -Name docker -ProviderName DockerMsftProvider -Force

2 Comments

HAve done ALL of this and still getting the failure to download.
If your work environment imposes a network wide proxy on your computer, this can help: Install-Module AzureDevOps -proxy "127.0.0.1:9000/localproxy-1709309785.pac" substituting, of course, the URL of your local proxy. The local proxy pac URL can be viewed in the UI in Settings > Network and Internet Settings > Proxy, or you may find it with one of the answers to serverfault.com/q/696020/190386. For myself, the only Powershell answer that worked was serverfault.com/a/696247/190386
0

I was starting from an old version of powershell and received the same error. For me the solution was to download and install the package manager manually. It was actually pretty quick. A short summary would be

  1. download the latest package manager (for example https://www.powershellgallery.com/packages/PackageManagement/1.4.8.1)

  2. extrtact to the correct folder (for example C:\Program Files\WindowsPowershell\Modules\1.4.8.1\)

  3. restart powershell.

I found the solution here https://devblogs.microsoft.com/powershell/when-powershellget-v1-fails-to-install-the-nuget-provider/

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.