PowerShell中的源.bat文件脚本变量

时间:2018-09-21 14:43:33

标签: powershell tivoli-work-scheduler

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

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

我可以启动cmd.exe shell,调用twa_env.cmd,然后启动PowerShell。这似乎有效。我还不能做的是启动PowerShell Shell,运行twa_env.cmd,并将新的变量设置重新带回PowerShell Env:。

1 个答案:

答案 0 :(得分:0)

PowerShell可以运行cmd.exe shell脚本(批处理文件),但是(自然)必须使用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
  }
}