为什么使用 SetEnvironmentVariable 设置的用户变量在通过 cmd 窗口发送的 powershell 命令中不可见?
Why are User variables set with SetEnvironmentVariable not visible from powershell commands sent via cmd window?
当我在 powershell 窗口中运行这两个命令时,我得到 "Test Value." 打印出来。
[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')
为什么我无法访问我在第二个示例中设置的变量?
我会说像这样混合两个炮弹是不好的形式。要么使用
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
环境。
您看到此行为是因为每个进程都维护自己的环境(在从其父进程继承环境之后)。父进程(在本例中为 cmd.exe)看不到 powershell.exe 所做的更改,因为这些更改随 powershell 进程一起消失。
当我在 powershell 窗口中运行这两个命令时,我得到 "Test Value." 打印出来。
[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')
为什么我无法访问我在第二个示例中设置的变量?
我会说像这样混合两个炮弹是不好的形式。要么使用 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 环境。
您看到此行为是因为每个进程都维护自己的环境(在从其父进程继承环境之后)。父进程(在本例中为 cmd.exe)看不到 powershell.exe 所做的更改,因为这些更改随 powershell 进程一起消失。