如何将参数传递给 Chocolatey 包中的安装程序?

How do I pass parameters to the installer in a Chocolatey package?

我从 MSI 创建了一个包。但是,我需要传入自定义参数。

/i SERVER='xx.yyy.com

以下是我通过阅读 choco 命令规范尝试的一些操作,但 none 有效。

> choco install foo -y --params "SERVER='xx.yyy.com'"
> choco install foo -y --params "SERVER=xx.yyy.com"
> choco install foo -y --params "SERVER= xx.yyy.com"

如何将安装选项传递给安装程序?

如果要传递给本机安装程序,请使用 --install-arguments 而不是 --package-parameters

https://chocolatey.org/docs/commands-install#options-and-switches

 --ia, --installargs, --installarguments, --install-arguments=VALUE
 InstallArguments - Install Arguments to pass to the native installer in 
   the package. Defaults to unspecified.

-o, --override, --overrideargs, --overridearguments, --override-arguments
 OverrideArguments - Should install arguments be used exclusively without 
   appending to current package passed arguments? Defaults to false.

 --params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE
 PackageParameters - Parameters to pass to the package. Defaults to 
   unspecified.

此外,您可能想浏览有关如何传递选项和开关的文档 - https://chocolatey.org/docs/commands-reference#how-to-pass-options-switches:

  • 引用值:当你需要引用整个论点时,比如当 使用空格,请使用双引号和 撇号 ("'value'")。在 cmd.exe 中,您可以只使用双引号 ("value") 但在 powershell.exe 中你应该使用反引号 (`"value`") 或撇号 ('value')。使用组合允许两者 shell 可以正常工作,除非下一节 适用。
  • 在参数中传递引号:当你需要传递引号时 将值设置为类似于本机安装程序的东西,您将获得 乐趣的世界。在 cmd.exe 中,您必须像这样传递它:-ia "/yo=""Spaces spaces"""。在PowerShell.exe中,你必须像 这个:-ia '/yo=""Spaces spaces""'。没有其他组合会起作用。在 PowerShell.exe 如果你的版本是 v3+,你可以在 -ia 之前尝试 --% 只是按原样传递参数,这意味着它不应该 需要任何特殊的解决方法。

我发现很难找到有关将值设置到 Choco 包参数中的信息!

choco install -h 没什么帮助。

作为为包参数设置值的简单示例(与 MSI 参数相反 - 这完全不同),这是一个简单、可行的示例:

choco install python2 --package-parameters='"/InstallDir:D:\Python2"'

“/InstallDir”被记录为 "python2" Choco 包的包参数。

请注意,“--package-parameters”有几个别名,如果您想节省输入,最短的是“--params”。

另请注意在分配值时使用冒号,而不是“=”。

如果值中需要空格,请用额外的双引号将值括起来 - 即需要四个新字符。

...我已在 Choco 论坛上要求改进文档。

补充:在 PowerShell 变量中使用 --param 参数传递给安装程序,例如

choco install vscode $ParVar

只有当您在 --params ... 之后包含等号 =(而不是空格)时,才有效大多数包文档显示它没有等号!虽然这不是直接执行的问题,但通过变量传递参数时会失败。

VS 代码证明:

没有等号:

Proceeding Code
  1. VS Code Chocolatey Documentation: | choco install vscode--params "/NoDesktopIcon /NoQuicklaunchIcon"
  2. 复制到变量:| $ParVar = '--params "/NoDesktopIcon /NoQuicklaunchIcon"'
    注意单引号和双引号(参见其他答案)。
  3. 执行(->错误):| choco install vscode $ParVar

带等号:

Proceeding Code
2. Copy to variable: $ParVar = '--params="/NoDesktopIcon /NoQuicklaunchIcon"'
Pay attention to = sign after params
3. Execution (-> success): choco install vscode $ParVar

-> 这可以用在所有需要带双引号的 params 参数的包中。我用几个包测试了这个。

我利用这种方法为很多应用程序建立 key:value 词典,然后 batch install on new machines