我有一个Windows Elastic Beanstalk实例。我在我的项目的commands.config
中有以下.ebextensions
commands:
00-install-choco:
command: |
powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"
01-set-choco-path:
command: |
SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
这两个命令正在运行。但是,我也有一个container-commands.config
文件需要调用choco
,但由于'choco' is not recognized as an internal or external command
它一直失败
container_commands:
01-install nssm:
command: |
choco install nssm -y
如何获取后续命令来获取更新的PATH
?是否有更合适的方法来安装二进制文件并在创建ESB实例期间将它们设置为Window的PATH
?
files:
c:/tools/ewmp.cmd:
content: |
@ECHO OFF
FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
%*
commands:
01-install-choco:
command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
waitAfterCompletion: 0
02-install-nssm:
command: c:/tools/ewmp choco install nssm -y
waitAfterCompletion: 0
但即便如此,也会给我类似的错误。
-----------------------Command Output-----------------------
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.
'choco' is not recognized as an internal or external command,
operable program or batch file.
------------------------------------------------------------
我不是Elastic Beanstalk的用户,所以我不能说这是否有效,但根据documentation,有必要提供一个额外的命令来更新使用的PATH变量:
Chocolatey安装程序及其安装的软件包可能会修改计算机的PATH环境变量。这增加了复杂性,因为这些安装之后的后续命令在同一会话中执行,该会话没有更新的PATH。为了解决这个问题,我们利用命令文件在执行命令之前将会话的PATH设置为机器的PATH。
files:
c:/tools/ewmp.cmd:
content: |
@ECHO OFF
FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
%*
commands:
00-install-choco:
command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
container_commands:
01-install nssm:
command: |
c:toolsewmp choco install nssm -y
注意:基于文档,我不清楚的一件事是在命令部分使用c:toolsewmp
而不是c:/tools/ewmp
。我不知道这是否是在文档中向浏览器呈现的代码中的转义问题,或者这是否是故意的。您可能需要使用它来查看哪些有效。