Есть ли способ перечислить все пакеты Chocolatey, у которых нет зависимостей?

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

3 ответа

Следующий «однострочный» Powershell отобразит все зависимости для каждого пакета, установленного в вашей системе.

      cd C:\ProgramData\chocolatey\lib
Get-ChildItem C:\ProgramData\chocolatey\lib -Recurse -Name "*.nuspec" | % { Select-String "<dependency" $_ }

Или (адаптировано из предложений в комментариях):

      foreach ($nuspec in (Get-ChildItem C:\ProgramData\chocolatey\lib -Recurse "*.nuspec")) {
    $metadata = ([xml](Get-Content $nuspec.Fullname)).package.metadata
    foreach ($dependency in $metadata.dependencies.dependency) { 
        [PSCustomObject] @{
            package = $metadata.id
            version = $metadata.version
            dependson = $dependency.id
            dependencyversion = $dependency.version
        }
    }
}

Я не знаю ответа на ваш точный вопрос, так как создание такого списка потребовало бы от меня гораздо больших знаний о том, как Chocolatey устанавливает продукты. Тогда я бы лучше прокомментировал основную проблему, с которой вы столкнулись, и именно поэтому вы задали этот вопрос.

Можно удалить пакет Chocolatey и все его зависимости, используя параметр -x ( --forcedependencies ), чтобы также удалить зависимости при удалении пакета (ов). Поведение по умолчанию - не удалять зависимости.

Например:

choco uninstall notepadplusplus atom 7zip -x

С помощью этого переключателя Chocolatey, как предполагается, уменьшает количество зависимых от одной зависимости, которая распределяется между несколькими установленными пакетами, когда один из пакетов удален.

Это означает, что вам не нужно знать, есть ли у них зависимости или нет.

Если по какой-либо ошибке Chocolatey когда-либо неправильно использует эту функцию и удаляет зависимость, пока она еще используется другим пакетом, повреждение легко исправить. Смотрите эксперименты, проведенные в этом ответе переполнения стека.

Используя стандартную подсказку DOS, вы увидите список зависимостей для каждого пакета Chocolatey:

      for /r "%ChocolateyInstall%\lib\" %f in (*.nuspec) do @echo %~nxf & @type "%f"|find /i "dependency id" || echo       no dependencies

Примечание: предполагается, что Chocolatey установлен.

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