Необходимо запустить команду Powershell в отдельном экземпляре от скрипта - PullRequest
0 голосов
/ 05 августа 2020

Я работаю над сценарием PowerShell для установки Oracle клиента 19 c. Одна из вещей, которые мне нужно сделать в сценарии перед началом установки, - это удалить переменную среды из реестра Windows. Это команда, которую я использую в сценарии для этого:

Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "ORACLE_BASE" -Force

Проблема в том, что когда установка начинается позже в сценарии, он все еще думает, что этот параметр есть, даже если после того, как сценарий будет запущен настройки больше нет, когда я смотрю. Итак, я думаю, мне нужно запустить эту команду в особом экземпляре или что-то в этом роде, чтобы она сразу вступила в силу. Просто не знаю, как это сделать. Я пробовал использовать как start-process, так и invoke-expression для запуска PowerShell внутри скрипта, и ни один метод, похоже, не помогает. Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 06 августа 2020

Проблема в том, что когда установка начинается позже в скрипте, он все еще думает, что этот параметр есть, даже если после того, как скрипт завершен, его больше нет, когда я смотрю. Итак, я думаю, мне нужно запустить эту команду в особом экземпляре или что-то в этом роде, чтобы она сразу вступила в силу.

Ваше предположение неверно.

Переменные среды для исполняемого файла наследуются от процесса, запустившего исполняемый файл. Удаление переменной среды из реестра не приведет к ее исчезновению из текущего процесса. Вот почему «он все еще думает, что параметр есть».

Если вам действительно нужно, чтобы переменная не присутствовала в среде при запуске установки, то отключите ее из оболочки и запустите установщик:

  • cmd.exe сценарий / пакет оболочки:

     set ORACLE_BASE=
    
  • PowerShell:

    Remove-Item Env:ORACLE_BASE -ErrorAction SilentlyContinue
    

    -ErrorAction SilentlyContinue можно сократить на -EA 0 (предотвращает появление сообщения об ошибке, если переменная отсутствует в среде).

После удаления переменной (используйте команду выше, которая соответствует вашей оболочке), затем запустите установщик из этой оболочки. Затем установщик наследует среду от оболочки, и, таким образом, переменная не будет определена в процессе установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...