Skip to content

Instantly share code, notes, and snippets.

@kizzx2
Last active December 3, 2023 23:06
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save kizzx2/9282ea8b0e016960135d3c9ab88419e1 to your computer and use it in GitHub Desktop.
Save kizzx2/9282ea8b0e016960135d3c9ab88419e1 to your computer and use it in GitHub Desktop.
Run command with environment variables in PowerShell
$ori = @{}
Try {
$i = 0
# Loading .env files
if(Test-Path $args[0]) {
foreach($line in (Get-Content $args[0])) {
if($line -Match '^\s*$' -Or $line -Match '^#') {
continue
}
$key, $val = $line.Split("=")
$ori[$key] = if(Test-Path Env:\$key) { (Get-Item Env:\$key).Value } else { "" }
New-Item -Name $key -Value $val -ItemType Variable -Path Env: -Force > $null
}
$i++
}
while(1) {
if($i -ge $args.length) {
exit
}
if(!($args[$i] -Match '^[^ ]+=[^ ]+$')) {
break
}
$key, $val = $args[$i].Split("=")
$ori[$key] = if(Test-Path Env:\$key) { (Get-Item Env:\$key).Value } else { "" }
New-Item -Name $key -Value $val -ItemType Variable -Path Env: -Force > $null
$i++
}
Invoke-Expression ($args[$i..$args.length] -Join " ")
} Finally {
foreach($key in $ori.Keys) {
New-Item -Name $key -Value $ori.Item($key) -ItemType Variable -Path Env: -Force > $null
}
}
@7sDream
Copy link

7sDream commented Jan 9, 2023

Thanks for sharing!

I make small change at line 29, $key, $val = $args[$i] -split "=", 2, to handle = in env var value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment