You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何高效检查已安装的Chocolatey包(原参数失效)

检查Chocolatey包是否已安装的当前高效方法

问题背景

此前用于预检查Chocolatey包安装状态的PowerShell代码如下:

if (!(Test-Path "Program Files\7-Zip")) { 
    $command = "if ((choco list --local-only 7zip) -match '^0 packages') { choco install 7zip -y }"
    Start-Process "powershell.exe" -WindowStyle Hidden -Wait -ArgumentList "-sta -noprofile -executionpolicy unrestricted $command"
}

由于Chocolatey移除了list命令的--local-only参数,执行原命令会报错:

Invalid argument --local-only. This argument has been removed from the list command and cannot be used.

替代解决方案

方法1:使用choco info命令检查本地状态

choco info可返回包的详细信息,包含本地安装状态,通过匹配输出结果判断:

$packageName = "7zip"
$isInstalled = choco info $packageName | Select-String -Pattern "^Status:.*Installed" -Quiet

if (-not $isInstalled) {
    choco install $packageName -y
}

方法2:替换为list命令的新参数

Chocolatey将--local-only替换为--local(或简写-lo),直接修改原有命令即可:

$command = "if ((choco list --local 7zip) -match '^0 packages') { choco install 7zip -y }"
Start-Process "powershell.exe" -WindowStyle Hidden -Wait -ArgumentList "-sta -noprofile -executionpolicy unrestricted $command"

或使用简写参数:

$command = "if ((choco list -lo 7zip) -match '^0 packages') { choco install 7zip -y }"
Start-Process "powershell.exe" -WindowStyle Hidden -Wait -ArgumentList "-sta -noprofile -executionpolicy unrestricted $command"

方法3:调用Chocolatey PowerShell模块(高效推荐)

若已加载Chocolatey模块,可直接使用Get-ChocolateyPackage cmdlet:

$packageName = "7zip"
$isInstalled = Get-ChocolateyPackage -Name $packageName -ErrorAction SilentlyContinue

if (-not $isInstalled) {
    choco install $packageName -y
}

注:若模块未自动加载,可手动导入:Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"

内容的提问来源于stack exchange,提问作者YorSubs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:19