Переменные сценария исходного файла .bat в PowerShell - PullRequest
0 голосов
/ 21 сентября 2018

Я ищу способ в PowerShell для получения переменных среды от запуска сценария файла .bat в Env: провайдере.

Есть ли эквивалент twa_env.cmd, который настроит среду для TWSправильно в PowerShell?

Я могу запустить оболочку cmd.exe, CALL twa_env.cmd, затем запустить PowerShell.Это похоже на работу.Что я пока не могу сделать, так это запустить оболочку PowerShell, запустить twa_env.cmd и перенести новые параметры переменных обратно в PowerShell Env:.

1 Ответ

0 голосов
/ 24 сентября 2018

PowerShell может запускать сценарий оболочки cmd.exe (командный файл), но он (естественно) должен выполнять его, используя cmd.exe.Проблема заключается в том, что когда закрывается исполняемый файл cmd.exe, установленные им переменные среды не распространяются на вызывающий сеанс PowerShell.

Обходной путь заключается в «захвате» переменных среды, установленных в сеансе cmd.exeи вручную распространять их в PowerShell после завершения пакетного файла.Следующая Invoke-CmdScript функция PowerShell может сделать это за вас:

# Invokes a Cmd.exe shell script and updates the environment.
function Invoke-CmdScript {
  param(
    [String] $scriptName
  )
  $cmdLine = """$scriptName"" $args & set"
  & $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
    Select-String '^([^=]*)=(.*)$' |
    ForEach-Object {
      $varName = $_.Matches[0].Groups[1].Value
      $varValue = $_.Matches[0].Groups[2].Value
      Set-Item Env:$varName $varValue
  }
}
...