Chocolatey 安装与 PackageParams 错误解析第二个参数

Chocolatey Installation with PackageParams error parsing second argument

Chocolatey v0.13.3(免费版)

我们正在为我们的 Install Shield msi 安装程序创建巧克力包。 安装时,我们传入包参数 (-params) 以在安装后配置一些应用程序配置文件。

powershell 命令

cinst Company.Package –Version 1.2.3 -myf -params "DBName=DB1;DBIP=123.4.5.6;DBSomethingElse=true"

所有参数都正确传递并更新了配置文件,但巧克力抛出错误并指出第二个参数未重新克隆,这导致安装失败。

错误:术语 'DBIP=123.4.5.6' 未被识别为 cmdlet 的名称

巧克力安装。ps1

Install-ChocolateyInstallPackage @packageArgs
if ( $null -ne $env:chocolateyPackageParameters ) 
{
  Invoke-Expression "& $( Join-Path $toolsDir 'Configuration.ps1' ) $($env:chocolateyPackageParameters)"
}

在 tools/Configuration.ps1 中,我们像这样拆分参数

$(ConvertFrom-StringData -StringData $env:chocolateyPackageParameters.Replace( ";", "`n" ) ) 

我错过了什么?

我知道有更好的方法来配置系统(puppet、chef...),但这就是我可用的 atm

适当地传递选项

首先,确保您将论点适当地传递给 Chocolatey。 PowerShell.exe 和 cmd.exe 处理引号的方式不同,因此我们建议 "'args here'" - https://chocolatey.org/docs/commands-reference#how-to-pass-options-switches

您始终可以 运行 和 --noop --debug 了解这些选项如何传递到配置,而无需实际 运行 安装。您会发现 Chocolatey 在某些方面非常冗长。

你的错误

看来您是在配置中发现了错误。ps1,很好。

您可能依赖于 https://chocolatey.org/packages/chocolatey-core.extension(并将其下载到您的内部包存储库),因此您可以:

$pp = Get-PackageParameters

https://github.com/chocolatey/chocolatey-coreteampackages/blob/master/extensions/chocolatey-core.extension/extensions/Get-PackageParameters.ps1

脚本推荐

如果您将它与脚本一起使用,建议您使用 choco upgrade - 如果未安装软件包,它会安装,如果有更新的版本可用,它会进行升级。 HTH