Аз съм автор на няколко пакета 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 на екрана, което показваше, че един от крайните редове е премахнат!
МИСЪЛ:
Искам да кажа, трябва ли просто да не правя това и вместо това да напиша лесна променлива на средата "Потребител"? Не е правилно! Проклетите неща са инсталирани машинно... Не искам да се отказвам още.