Install-PackageProvider is not recognized as the name of a cmdlet, function, script file, or operable program

jamiet picture jamiet · Mar 5, 2016 · Viewed 30.6k times · Source

I'm following Get Started with the PowerShell Gallery which states that the PowerShellGet module exists in Windows 10 (which I am using - build 14721). To confirm, I am running PowerShell v5:

>$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.14271.1000
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14271.1000
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Get Started with the PowerShell Gallery states:

PowerShellGet also requires the NuGet provider to work with the PowerShell Gallery. You will be prompted to install the NuGet provider automatically upon first use of PowerShellGet if the NuGet provider is not in one of the following locations: •$env:ProgramFiles\PackageManagement\ProviderAssemblies
•$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies

I don't have anything in those locations:

>ls $env:LOCALAPPDATA\PackageManagement\ProviderAssemblies    
>ls $env:ProgramFiles\PackageManagement\ProviderAssemblies
ls : Cannot find path 'C:\Program Files\PackageManagement\ProviderAssemblies' because it does not exist.
At line:1 char:1
+ ls $env:ProgramFiles\PackageManagement\ProviderAssemblies
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Program File...viderAssemblies:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Get Started with the PowerShell Gallery then states:

Or, you can run Install-PackageProvider -Name NuGet -Force to automate the download and installation of the NuGet provider.

If I try that:

>Install-PackageProvider -Name NuGet -Force
Install-PackageProvider : The term 'Install-PackageProvider' is not recognized as the name of a cmdlet, function, script file, or operable program.
correct and try again.
At line:1 char:1
+ Install-PackageProvider -Name NuGet -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Install-PackageProvider:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

I'm very confused. I have PowerShell v5 but it seems I don't have everything that's supposed to be there, namely PowerShellGet.

Can someone explain why?

Answer

Soren Bjornstad picture Soren Bjornstad · Aug 3, 2020

When I did Get-Module -ListAvailable -Name PackageManagement, as Adam Bertram suggested, I found that there was a different version in my home folder, cruft from a previous install of Windows that got copied across to a new machine:

> Get-Module -ListAvailable -Name PackageManagement


    Directory: C:\Users\<myusername>\Documents\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.4.7      PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Binary     1.0.0.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-Packa..

Deleting this version, or before that just forcing the system version to be used with Import-Module PackageManagement -RequiredVersion 1.0.0.1, allowed me to get the NuGet provider installed.