使用PackageParams的Chocolatey安装错误解析第二个参数

时间:2017-02-14 16:27:02

标签: powershell chocolatey

Chocolatey v0.13.3(免费版)

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

powershell cmd

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

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

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

chocolateyinstall.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" ) ) 

我缺少什么?

我知道有更好的方法来配置系统(木偶,厨师......)但这就是我可以使用的所有内容

1 个答案:

答案 0 :(得分:1)

适当地传递选项

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

您始终可以使用--noop --debug运行,以了解这些选项如何在没有实际运行安装的情况下传递到配置。你会发现,巧克力在某些领域非常冗长。

您的错误

看起来你在Configuration.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