通过调用打印$ env:myVar = myvalue的python脚本在powershell中设置环境变量

时间:2013-11-03 06:05:27

标签: python linux windows bash powershell

我有一些遗留的python脚本来管理我在Linux(bash)和windows(cmd.exe)上运行的所有程序和插件的shell环境。我想把它移植到powershell。

如何通过调用打印$ env:myVar = myvalue的python脚本在powershell中设置环境变量 并导致我的环境变量在powershell中保留。

在Bash中我可以使用bash函数调用我的python脚本,它将export var = value打印到stdout,该函数将在我的shell中设置环境变量。这也可以通过调用.bat文件在windows cmd shell中起作用。

我无法弄清楚如何在PowerShell中执行此操作。我认为它应该是这样的:

setvar.ps1:

function SETVAR {c:\python26\python.exe varconfig.py }

varconfig.py:

import sys  
print >> sys.stdout, '$env:myVar=foo'

1 个答案:

答案 0 :(得分:0)

你需要这样的东西吗?它运行你的脚本使用EVERY返回的行来设置环境变量,使用与样本中相同的格式。

& c:\python26\python.exe varconfig.py | % { 
    #Expecting all result to be $env:NAME=VALUE for variables that need to be set
    $a = $_ -replace '\$env:(\w+)=(.*)', '$1;$2' -split ';'

    #Setting variables at process-level. Can be replaced with "User" and "Machine" for permanent variables
    [System.Environment]::SetEnvironmentVariable($a[0],$a[1], "Process")
}

仅限流程级别,您也可以使用此功能。它将为您的脚本中的值添加引号,然后只需执行它。

& c:\python26\python.exe varconfig.py | % { iex $($_ -replace '=(.*)', '="$1"') }