If you’re following me on Twitter then you probably know that I’ve been working a lot with the new features in PowerShell version 5, with my focus being on the cmdlets in the OneGet and PowerShellGet modules.
I’ve been fighting an issue where an error is received when the Name parameter is specified with Find-Module or Install-Module when using a local NuGet Repository:
Find-PSGetExtModule : Module ‘Pscx’ was not found in the Gallery. At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PowerShellGet\PSGet.psm1:72 char:13 + Find-PSGetExtModule -Name $Name ` + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _ + CategoryInfo : InvalidOperation: (:) [Write-Error], WriteErrorException_ _ + FullyQualifiedErrorId : ModuleNotFound,Find-PSGetExtModule_
I can also tell you this isn’t an issue that’s specific to a NuGet repository that’s created with ProGet because I started out with a NuGet repository that was created with Visual Studio:
The strange thing is this works without issue with the default online repository:
To confirm that it wasn’t an issue for just me I contacted Tore Groneng via twitter since I knew he had recently written a blog article about setting up an internal PowerShellGet repository with ProGet. He tested the issue I was experiencing and confirmed it was a problem for him as well.
As stated in the error message, I headed to line 72, character 13 of the file: C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PowerShellGet\PSGet.psm1
That led me to the Find-PSGetExtModule function in the PSGallery module which is located in a sub-directory of the PowerShellGet module:
I tested the code down to line 298 and determined the problem exists on line 293:
When the code on line 298 is run, the following command is executed in the example where I received the error:
I’m really not sure what the “id:“on line 293 does since I couldn’t find it in any of the documentation for NuGet.exe, but simply removing it returns the expected results:
I then removed “id:” from line 293 of the PSGallery module (this required some changes to the NTFS permissions of the file itself):
After re-importing the PowerShellGet module, the Name parameter worked without issue:
It also still works with the default online repository as well so there must be something where it parses the “id:” out somehow that is specific to the online repository:
Note: PowerShell version 5 is currently in preview and shouldn’t be installed in a production environment. Normally the Microsoft supplied modules aren’t script modules so they’re not modifiable and even though this one is, modification of the native modules is definitely not recommended and could lead to unexpected results to say the least.
There is already a Connect Bug logged about an issue that sounds similar to this problem.
By the way, I’m speaking on “What’s New in PowerShell Version 5 (Preview)?” at TechStravaganza in Atlanta on Friday, June 6th. It’s a free technology event, however you do need a ticket if you plan to attend. There are currently a few tickets still available.
Update: I verified with Steve Murawski that the previously referenced Connect Bug is indeed the same issue so I recommend voting it up. Steve also provided me with a link to the NuGet documentation for the “id:” parameter.