有没有办法列出所有没有依赖项的 Chocolatey 包?

有没有办法列出所有没有依赖项的 Chocolatey 包?

有时我会在 Chocolatey 软件包列表中发现意想不到的软件包,想知道是否可以安全地卸载它们。我知道我可以尝试卸载它们并等待 Chocolatey 提醒我,但这意味着我必须一个接一个地执行此操作。

答案1

以下 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
        }
    }
}

答案2

我不知道您问题的确切答案,因为创建这样的列表需要比我更了解 Chocolatey 如何安装产品。我宁愿尝试评论您面临的根本问题,这也是您提出这个问题的原因。

可以使用参数卸载 Chocolatey 包及其所有依赖项 -x--forcedependencies 在卸载软件包时也卸载依赖项。默认行为是不卸载依赖项。

例如 :

choco uninstall notepadplusplus atom 7zip -x

通过此开关,Chocolatey 应该仅在卸载其中一个软件包时减少在多个已安装软件包之间共享的任何一个依赖项的依赖数量。

这意味着您不需要知道它们是否有依赖关系。

如果 Chocolatey 因任何错误处理此功能并卸载依赖项,而该依赖项仍在由另一个包使用,则可以轻松修复损坏。请参阅此处进行的实验 Stack Overflow 答案

答案3

使用标准 DOS 提示符,这将列出每个 Chocolatey 包的依赖项:

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

注意:假设已安装 Chocolatey。

相关内容