为什么通过cmd窗口发送的powershell命令看不到使用SetEnvironmentVariable设置的用户变量?

时间:2015-01-03 00:09:03

标签: powershell

当我在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')

为什么我不能访问我在第二个例子中设置的变量?

2 个答案:

答案 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 环境。

Example