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
ошибка, даже с высотой.
- Удаление DLL будет успешным только в том случае, если в данный момент она не загружена ни в одном сеансе; если это не будет обеспечено, вы получите
В сеансе с повышенными правами (в котором вы не должны отправлять никаких
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 для принудительного удаления пакета.