如何在 PowerShell 中从批处理文件设置环境变量?

如何在 PowerShell 中从批处理文件设置环境变量?

我需要从批处理文件设置环境变量。在 Linux 中,我可以使用以下命令:

source key.sh

我如何在 PowerShell 中执行此操作?当我运行 时key.bat,它给出了一个错误。我运行.\key.bat并设置了变量,但当我运行 时它没有显示$env:KEY

答案1

如果您有可用的 powershell,只需在 powershell 中调用 .net 即可根据您的需要设置环境。

[System.Environment]::SetEnvironmentVariable($Name, $Value, [System.EnvironmentVariableTarget]::Machine)
//[System.EnvironmentVariableTarget]::Machine
//[System.EnvironmentVariableTarget]::User
//[System.EnvironmentVariableTarget]::Process

参见 SetEnvironmentVariable 文档:
https://docs.microsoft.com/en-us/dotnet/api/system.environment.setenvironmentvariable?view=net-6.0

如果需要修改批处理下的用户环境,我会更改注册表。

参见 reg add 文档:
https://docs.microsoft.com/de-de/windows-server/administration/windows-commands/reg-add

reg add HKEY_CURRENT_USER\Environment /v "TestTemp" /t REG_EXPAND_SZ /d "C:\temp"

请注意,被调用的进程是父进程的子进程而不是单独的进程,因为如果进程调用链中断,所有进程环境变量都会丢失。

顺便说一下,powershell 中源命令的替换是不同的问题。

请参阅微软文档:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scripts?view=powershell-7.2

source key.sh

将会

. "key.ps1"

在 PowerShell 中。

相关内容