ci: use JSON to transfer environment variables

The `set` command in `cmd` has terrible properties in that there's no
real structure to it. Sensitive sequences in values or variable names
that are escaping sequences can be interpreted at the wrong time or
things like newlines in values are not escaped at all and cause
ambiguities in parsing. Avoid all of that and use PowerShell to use JSON
as a communication mechanism.
This commit is contained in:
Ben Boeckel 2024-10-31 08:33:00 -04:00
parent 641976a36b
commit c1ddff67f2

View File

@ -1,9 +1,7 @@
$erroractionpreference = "stop"
cmd /c "`"$env:VCVARSALL`" $env:VCVARSPLATFORM -vcvars_ver=$env:VCVARSVERSION & set" |
foreach {
if ($_ -match "=") {
$v = $_.split("=")
[Environment]::SetEnvironmentVariable($v[0], $v[1])
}
$all_env = cmd /c "`"$env:VCVARSALL`" $env:VCVARSPLATFORM -vcvars_ver=$env:VCVARSVERSION >NUL & powershell -Command `"Get-ChildItem env: | Select-Object -Property Key,Value | ConvertTo-Json`"" | ConvertFrom-Json
foreach ($envvar in $all_env) {
[Environment]::SetEnvironmentVariable($envvar.Key, $envvar.Value)
}