0

我正在寻找一种在 PowerShell 中将环境变量从运行 .bat 文件脚本中获取到 Env: 提供程序的方法。

是否有等效于 twa_env.cmd 可以在 PowerShell 中正确设置 TWS 的环境?

我可以启动一个 cmd.exe shell,CALL twa_env.cmd,然后启动 PowerShell。这似乎行得通。我还不能做的是启动 PowerShell shell,运行 twa_env.cmd,然后将新的变量设置带回 PowerShell Env:。

4

1 回答 1

1

PowerShell 可以运行cmd.exeshell 脚本(批处理文件),但它(自然)必须使用cmd.exe. 问题是当cmd.exe可执行文件关闭时,它设置的环境变量不会传播到调用 PowerShell 会话。

解决方法是“捕获”cmd.exe会话中设置的环境变量,并在批处理文件完成后手动将它们传播到 PowerShell。以下Invoke-CmdScriptPowerShell 函数可以为您做到这一点:

# 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
  }
}
于 2018-09-24T14:23:16.443 回答