Ant*_*ean 2 powershell escaping environment-variables chocolatey
我是几个Chocolatey包的作者,需要将环境变量设置为包的正确"安装"的一部分.例如:ANT_HOME,MW_HOME,并JAVA_HOME在Java生态系统应分别指向安装目录的蚂蚁时,WebLogic和Java.
而且,由于Chocolatey是一个机器级的包管理器,我的想法是设置这些机器范围(MSDN).
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "path/to/jre/install", "Machine")
Run Code Online (Sandbox Code Playgroud)
如果我只是运行它,我得到预期的权限异常
使用"3"参数调用"SetEnvironmentVariable"的异常:"不允许请求的注册表访问."
如果我在高架提示中手动运行相同的命令,一切正常.所以,我需要在提升的提示中调用它.使用Chocolatey,你应该使用:[Start-ChocolateyProcessAsAdmin][2]像这样
Start-ChocolateyProcessAsAdmin @"
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "path/to/jre/install", "Machine")
"@
Run Code Online (Sandbox Code Playgroud)
它提示提升(我在开发时总是以正常提示运行以确保它实际工作),但是我看到闪烁的红色错误并且此消息没有警告/错误
提升权限并运行C:\ windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command"&import-module -name'C:\ Chocolatey\chocolateyinstall\helpers\chocolateyInstaller.psm1'; try {[System.Environment] :: SetEnvironmentVariable("JAVA_HOME","path/to/jre/install","Machine"); start-sleep 6;} catch {write-error'那不是成功的';开始 - 睡眠8;抛出;}".这可能需要一段时间,具体取决于陈述.
是什么赋予了?
更新:
下面的一些组合使它工作,神秘地...添加行终止符(甚至单个语句)并将所有参数包装在单引号中.
Start-ChocolateyProcessAsAdmin @"
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', 'path/to/jre/install', 'Machine');
"@
Run Code Online (Sandbox Code Playgroud)
我仍然想要一个非暴力的答案.我确信它是PowerShell的噩梦字符串引用/解释规则+ Chocolatey的调用的组合.
更新:
即使我将它们分开,我也遇到了多个语句的问题!
Start-ChocolateyProcessAsAdmin @"
[System.Environment]::SetEnvironmentVariable('MW_HOME', 'path/to/wl/install', 'Machine');
[System.Environment]::SetEnvironmentVariable('WL_HOME', 'path/to/wl/install/wlserver', 'Machine');
"@
Run Code Online (Sandbox Code Playgroud)
我看到,但没有捕获,屏幕上的Chocolatey日志声明显示其中一个线路终结器已被删除!
思想:
我的意思是,我应该不这样做并编写一个简单的"用户"环境变量吗?这不对!该死的东西安装在整个机器上......我不想放弃.
为什么不使用内置的帮助器,Install-ChocolateyEnvironmentVariable.用法很简单......
Install-ChocolateyEnvironmentVariable 'JAVA_HOME' 'path\to\jre' 'Machine'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |