我想从 powershell 运行一个 cmd 文件并通过该 cmd 文件检索一个设置的变量
我的脚本返回一个 null/空变量
Start-Process -FilePath "cmd.exe" -ArgumentList "/c 'my.cmd'" -Wait
$envVariable = [System.Environment]::GetEnvironmentVariable("my-variable", [System.EnvironmentVariableTarget]::Process)
Write-Host "Environment Variable Value: $envVariable"
.cmd 文件包含这样的行
set my-variable=2.6.4.6
如何从 powershell 获取该值?
感谢您的帮助
问题:
仅当您的批处理创建了持久
环境变量(即存储在注册表中的环境变量,例如:通过
[System.Environment]::GetEnvironmentVariable()
exe。
相比之下,setx.
cmd.exe
命令创建
进程范围环境变量,即它们仅为
当前进程定义。 因为 PowerShell 必须在子进程
SET
、
*.cmd
)(通过 *.bat
隐式),所以它无法查询由批处理文件创建的进程级环境变量:当调用返回时,批处理文件进程已退出,并且其进程特定的环境变量不再存在。
一个假设您的批处理文件在
cmd.exe
设置其环境变量之前不使用SETLOCAL
- 如果其目的是为托管
SET
会话设置环境变量,则会出现这种情况 - 您可以使用以下方法:
通过 cmd.exe
cmd.exe
) 调用批处理文件,并在调用后单独使用
cmd /c
命令,该命令会列出执行批处理文件后的所有进程级环境变量。
您可以捕获此列表并将其与 PowerShell注意:下面仅关注 added
和SET