src/Measure-EnvVarChanges.ps1
#!/usr/bin/env pwsh $ErrorActionPreference = "Stop" Set-StrictMode -Version Latest <# .SYNOPSIS Measures the changes to environment variables made by a script block. .PARAMETER inner The script block to execute. .OUTPUTS PSCustomObject with the following properties: key: The name of the environment variable that changed. before: The value of the environment variable before the script block was executed. after: The value of the environment variable after the script block was executed. .COMPONENT env #> function Measure-EnvVarChanges([ScriptBlock] $inner) { [Hashtable] $before = @{} Get-ChildItem Env:\ | %{ $before[$_.Name] = $_.Value } &$inner [Hashtable] $after = @{} Get-ChildItem Env:\ | %{ $after[$_.Name] = $_.Value } return ($before.Keys + $after.Keys) ` | Select-Object -Unique ` | %{ New-Object PSCustomObject -Property @{key = $_; before=$before[$_]; after=$after[$_]}} ` | ?{$_.before -ne $_.after} } |