Как да задам променлива на обкръжението на Machine от пакет Chocolatey?

Аз съм автор на няколко пакета Chocolatey, които трябва да зададат променливи на средата като част от правилната "инсталация" на пакета. Например: ANT_HOME, MW_HOME и JAVA_HOME в екосистемата на Java трябва да сочат съответно инсталационната директория за ant, weblogic и java.

И тъй като Chocolatey е пакетен мениджър за цялата машина, мисълта ми е да задам тези за цялата машина (MSDN).

[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "path/to/jre/install", "Machine")

Ако просто стартирам това, получавам очакваното изключение за разрешение

Изключение, извикващо "SetEnvironmentVariable" с аргумент(и) "3": "Заявеният достъп до регистъра не е разрешен."

Ако изпълня същата команда в подкана с повишени права, ръчно, всичко работи добре. Така че трябва да го извикам в повишена подкана. С Chocolatey трябва да използвате: [Start-ChocolateyProcessAsAdmin][2] така

Start-ChocolateyProcessAsAdmin @"
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "path/to/jre/install", "Machine")
"@

Той подканва за повишаване (винаги изпълнявам нормален промпт, когато разработвам, за да съм сигурен, че наистина работи), но виждам червени грешки да мигат и това съобщение без предупреждение/грешка

Повишаване на разрешенията и стартиране на C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "& import-module -name 'C:\Chocolatey\chocolateyinstall\helpers\chocolateyInstaller.psm1'; опитайте {[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "path/to/jre/install", "Machine"); start-sleep 6;}catch{write-error 'Това не беше успешно';start-sleep 8;хвърли;}". Това може да отнеме известно време в зависимост от изявленията.

Какво дава?


АКТУАЛИЗАЦИЯ:

Някаква комбинация от следното го кара да работи, мистериозно... добавяне на терминатори на редове (дори към единични изрази) и опаковане на всички аргументи в единични кавички.

Start-ChocolateyProcessAsAdmin @"
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', 'path/to/jre/install', 'Machine');
"@

Все пак бих искал отговор без груба сила. Сигурен съм, че е комбинация от правилата за цитиране/тълкуване на кошмарни низове на 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');
"@

Видях, но не заснех, изявление Chocolatey log на екрана, което показваше, че един от крайните редове е премахнат!


МИСЪЛ:

Искам да кажа, трябва ли просто да не правя това и вместо това да напиша лесна променлива на средата "Потребител"? Не е правилно! Проклетите неща са инсталирани машинно... Не искам да се отказвам още.


person Anthony Mastrean    schedule 27.01.2014    source източник
comment
Уф, моята актуализация също изглежда неуспешна! Ако го изпълня ръчно в редовна сесия, работи. Ако оставя Chocolatey да го управлява, изглежда произволно.   -  person Anthony Mastrean    schedule 28.01.2014


Отговори (1)


Защо не използвате вградения помощник за това, Install-ChocolateyEnvironmentVariable. Употребата е доста проста...

Install-ChocolateyEnvironmentVariable 'JAVA_HOME' 'path\to\jre' 'Machine'
person ferventcoder    schedule 29.01.2014
comment
Защото не съм запознат с моите помощници и не знаех, че това съществува! - person Anthony Mastrean; 29.01.2014