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
相关产品推荐
相关产品推荐

