如何修复Nuget提供程序“查找模块”安装错误与PowerShell 7.3?

camsedfj  于 2022-12-18  发布在  Shell
关注(0)|答案(2)|浏览(106)

我一直在尝试运行PowerShell脚本,在运行时,我收到一条消息,要求NuGet提供程序。

NuGet provider is required to continue
This version of PowerShellGet requires minimum version '2.8.5.201' of NuGet provider to publish an item to NuGet-based
repositories. The NuGet provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\timothy.granata\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider
by running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install
 and import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

如果输入Y,则返回错误:

Find-Module: NuGet provider is required to interact with NuGet-based repositories. Please ensure that '2.8.5.201' or newer version of NuGet provider is installed.

如果我尝试按照Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force的建议运行它,我也会得到一个错误:

Install-PackageProvider: Unable to find repository with SourceLocation ''. Use Get-PSRepository to see all available repositories.


最后,如果我运行Get-PSRepository,也会出现错误:

Get-PackageSource: Unable to find module providers (PowerShellGet).

在我尝试调试的脚本中,触发此提示符的代码似乎是Install-AWSToolsModule SecurityToken -Force

if (-not (Get-Module AWS.Tools.Installer -ListAvailable)) {
    Install-Module AWS.Tools.Installer -Force
}

Install-AWSToolsModule SecurityToken -Force

Get-AWSCredential -ListProfileDetail | ForEach-Object {
    Remove-AWSCredentialProfile -ProfileName $_.ProfileName -Force
}

我试过:

  • 重新安装PowerShell 7
  • 通过运行[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12确保I am using TLS 1.2
  • 以管理员身份运行PowerShell
  • 在我的C:\用户\文档\WindowsPowerShell文件夹中找到Deleting the Modules folder

我不确定此时还可以尝试什么。如何安装NuGet提供程序以与PowerShell 7.3一起使用?

axr492tv

axr492tv1#

试试看

$sourceArgs = @{
    Name = 'nuget.org'
    Location = 'https://api.nuget.org/v3/index.json'
    ProviderName = 'NuGet'
}

Register-PackageSource @sourceArgs

Get-PackageProvider | where name -eq 'nuget' | Install-PackageProvider

编辑

也许试试

Invoke-WebRequest 'https://www.powershellgallery.com/api/v2/package/PackageManagement/1.4.8.1' -OutFile $env:temp\nuget.zip

并确认您可以下载nuget软件包。如果可以,请尝试

Expand-Archive $env:temp\nuget.zip -DestinationPath 'C:\Program Files\PowerShell\7\Modules\PackageManagement' -Force

Import-Module PackageManagement -Verbose -Force

vu8f3i0k

vu8f3i0k2#

看起来OneDrive确实有什么东西把这件事抛到了九霄云外,就像我在一篇评论中想的那样。我发现this post声明(来自一些微软文档):
Windows上用户特定的CurrentUser位置是用户配置文件中Documents位置的PowerShell\Modules文件夹... Microsoft OneDrive也可以更改Documents文件夹的位置。
我运行了$env:PSModulePath,果然是一个OneDrive位置。最后我按照answer的建议做了,并从OneDrive中排除了PowerShell目录。这样做之后,我的脚本现在似乎可以工作了(它不会产生错误,也不会产生那个提示符)。在这样做之后,OneDrive位置仍然会从$env:PSModulePath命令中显示出来,但我猜如果找不到目录,它福尔斯到下一个模块的位置。

相关问题