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

Eld*_*rry 5 package-management chocolatey unwanted-application

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

K. *_*Shu 5

以下 Powershell“one-liner”将显示系统上安装的每个包的所有依赖项

cd C:\ProgramData\chocolatey\lib
Get-ChildItem C:\ProgramData\chocolatey\lib -Recurse -Name "*.nuspec" | % { Select-String "<dependency" $_ }
Run Code Online (Sandbox Code Playgroud)

或者(改编自评论中的建议):

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于它是 XML,因此可能效果更好:`$(Get-ChildItem C:\ProgramData\chocolatey\lib -Recurse "*.nuspec" | % {([xml](gc $_.Fullname)).package。元数据.依赖项.依赖项 } )` (2认同)

har*_*ymc 3

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

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

例如 :

choco uninstall notepadplusplus atom 7zip -x
Run Code Online (Sandbox Code Playgroud)

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

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

如果由于任何错误,Chocolatey 错误地处理了此功能并在另一个包仍在使用依赖项时卸载了该依赖项,则损坏很容易修复。请参阅Stack Overflow 答案中进行的实验 。