当我在PowerShell窗口中运行这两个命令时,我得到“测试值”。打印出来。
[Environment]::SetEnvironmentVariable('TestVariable', 'Test value.')
[Environment]::GetEnvironmentVariable('TestVariable')
但是当我在cmd窗口中运行这两个命令时,我没有打印出任何内容。
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Command {[Environment]::SetEnvironmentVariable('TestVariable', 'Test value.')}
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Command [Environment]::GetEnvironmentVariable('TestVariable')
为什么我不能访问我在第二个例子中设置的变量?
答案 0 :(得分:6)
您看到了这种行为,因为每个进程都维护着自己的环境(在它从父进程继承环境之后)。父进程(在本例中为cmd.exe)看不到powershell.exe所做的更改,因为这些更改因powershell进程而中断。
答案 1 :(得分:1)
我想说混合两个这样的贝壳是不好的形式。要么使用 PowerShell或使用cmd.exe。但是,如果你坚持这样做:
C:\> powershell "[environment]::setEnvironmentVariable('foo', 'bar', 'm')"
C:\> powershell "[environment]::getEnvironmentVariable('foo')"
bar
请注意,您也可以
C:\> powershell "$env:foo"
bar
或理智的选择
C:\> echo %foo%
bar
请注意,在识别变量之前,可能需要重新启动cmd.exe 环境。