Как исправить ошибку установки Nuget Provider «Find-Module» с помощью PowerShell 7.3?

Я пытался запустить сценарий 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
  • Убедившись, что я использую TLS 1.2, запустив [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  • Запуск PowerShell от имени администратора
  • Удаление папки Modules в моей папке C:\Users<user>\Documents\WindowsPowerShell

Я не уверен, что еще я могу попробовать на данный момент. Как установить поставщика NuGet для использования с PowerShell 7.3?

Что показывает Get-Command Get-PackageProvider?

Doug Maurer 01.12.2022 22:57

@DougMaurer эта команда возвращает Cmdlet Get-PackageProvider 1.4.8.1 PackageManagement

Timothy G. 02.12.2022 03:06

@DougMaurer Я также добавил в сценарий код, который запускает подсказку, хотя я не думаю, что это действительно имеет значение для рассматриваемой проблемы.

Timothy G. 02.12.2022 04:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
117
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пытаться

$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

Кажется, выдает похожие ошибки: i.stack.imgur.com/fvmFT.png Коллега порекомендовал что-то похожее, я думаю, на самом деле: Register-PackageSource -Name MyNuGet -Location https://www.nuget.org/api/v2 -ProviderName NuGet как видно на этой странице

Timothy G. 01.12.2022 21:19

@ТимотиГ. это прискорбно.

Doug Maurer 01.12.2022 22:18

Я попробовал то, что предложило ваше редактирование - в итоге он экспортировал и импортировал журнал командлетов в соответствии с подробными журналами i.stack.imgur.com/5JdF5.png . Кажется, загруженные модули поступают из моей папки OneDrive. Интересно, имеет ли это какое-то отношение к этому? На одной странице, на которую я ссылался в своем вопросе, упоминалось что-то о перенаправлениях OneDrive, что усложняет их ситуацию. Тем не менее, после этого ошибки не исчезают.

Timothy G. 02.12.2022 03:17
Ответ принят как подходящий

Кажется, что-то с OneDrive действительно отбрасывало это, как я задавался вопросом в своем одном комментарии . Я нашел этот пост , в котором говорилось (из какой-то документации Microsoft):

Местоположение CurrentUser для конкретного пользователя в Windows — это папка PowerShell\Modules, расположенная в папке «Документы» в вашем профиле пользователя... Microsoft OneDrive также может изменить расположение папки «Документы».

Я побежал $env:PSModulePath и, конечно же, это была локация OneDrive. В итоге я сделал то, что предложил ответ на этот пост, и исключил каталог PowerShell из OneDrive. После этого мой скрипт теперь работает (он не выдает ошибок или этой подсказки). После этого местоположение OneDrive по-прежнему отображается из команды $env:PSModulePath, но я предполагаю, что оно возвращается к следующему местоположению модулей, если не может найти каталог.

Другие вопросы по теме