PowerShell PackageManagement, как удалить поставщика пакетов?

Чтобы решить проблему, я решил попробовать переустановить поставщика пакетов Chocolatey. Похоже, что нет командлета для удаления или удаления поставщика пакетов. Я не имею в виду удаление исходного пакета или пакета. Я использую PowerShell 5 на Windows 10.

Есть ли способ удалить поставщика пакетов?

4 ответа

Решение

Поставщики пакетов связаны с установкой WMF.

Вы можете легко добавить поставщиков пакетов (и удалить их), если знаете местоположения поиска (даже собственные поставщики пакетов).

Найдите, где установлен ваш пакет-провайдер:

$p = (Get-packageProvider -name Chocolatey);
$p.ProviderPath

Если вы удалите / переместите сборку куда-нибудь за пределы пути поиска поставщика по умолчанию; он будет недоступен (NB: перезагрузите хост, чтобы увидеть эффекты).

Точно так же вы можете добавить поставщиков пакетов, скопировав exe / dll, который реализует спецификации для поставщика пакетов, в местоположение поиска.

Дополнительную документацию можно найти здесь (реализуя свое собственное местоположение и местоположение поиска по умолчанию):

https://github.com/OneGet/oneget/wiki/Provider-assembly-search-locations https://github.com/OneGet/oneget/wiki/ImplementingPackageProvider

Чтобы дополнить полезный ответ Харальда Ф. , учитывая, что модуль версии 1.4.7 все еще не имеет Uninstall-PackageProviderкоманда (см. все команды, которые поставляются с модулем с Get-Command -Module PackageManagement):

Примечание. Чтобы иметь возможность отменить это изменение позже, запишите путь, указанный (Get-PackageProvider NuGet).ProviderPathи сделайте резервную копию этого файла.

Пошаговая инструкция по удалению поставщика пакетов, например:

  • В Windows :

    • Скопируйте путь к сборке поставщика пакетов NuGet (DLL) в буфер обмена:

      • (Get-PackageProvider NuGet).ProviderPath | Set-Clipboard
    • Запустите сеанс PowerShell с повышенными привилегиями (запустите от имени администратора — требуются учетные данные администратора). Чтобы сделать это из существующего (без повышенных прав) сеанса, запустите:

      • Start-Process -Verb RunAs (Get-Process -Id $PID).Path
    • Прежде чем продолжить, закройте все другие сеансы PowerShell , которые могут потребовать выхода из Visual Studio Code.

      • Удаление DLL будет успешным только в том случае, если в данный момент она не загружена ни в одном сеансе; если это не будет обеспечено, вы получите Access deniedошибка, даже с высотой.
    • В сеансе с повышенными правами (в котором вы не должны отправлять никаких PackageManagementкоманды), введите следующую команду, чтобы удалить сборку поставщика пакетов NuGet (DLL):

      • Remove-Item -Force <paste-the-previously-copied-path-here>
  • В macOS и Linux :

    • Запустите сеанс PowerShell с . Чтобы сделать это из существующего (без повышенных прав) сеанса, запустите:

      • sudo pwsh
    • Отправьте следующую команду, чтобы удалить сборку поставщика пакетов NuGet (DLL):

      • (Get-PackageProvider NuGet).ProviderPath | Remove-Item -Force
  • Остальные шаги применимы ко всем платформам:

    • Выйдите из приподнятого / sudoсессия.

    • Запустите новый (без повышенных прав) сеанс, чтобы изменения вступили в силу: Get-PackageProviderзатем больше не должен перечислять NuGetпровайдер.

Простой пример того, как удалить NuGet-провайдер

(Get-PackageProvider| где-объект {$_. Name -eq "nuget"}).ProviderPath|Remove-Item -force Restart-Computer

Если я понимаю, что вы хотите:

Uninstall-Package [-Id] [-RemoveDependencies] [-ProjectName] [-Force] [-Version] [-WhatIf]

Используйте параметр -Force для принудительного удаления пакета.

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