Update-SessionEnvironment.ps1
# Copyright © 2017 Chocolatey Software, Inc. # Copyright © 2015 - 2017 RealDimensions Software, LLC # Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. . "$PSScriptRoot/Get-EnvironmentVariableNames.ps1" . "$PSScriptRoot/Get-EnvironmentVariable.ps1" function Update-SessionEnvironment { $refreshEnv = $false $invocation = $MyInvocation Write-Verbose "Refreshing environment variables from the registry." $userName = $env:USERNAME $architecture = $env:PROCESSOR_ARCHITECTURE $psModulePath = $env:PSModulePath #ordering is important here, $user comes after so we can override $machine 'Process', 'Machine', 'User' | % { $scope = $_ Get-EnvironmentVariableNames -Scope $scope | % { Set-Item "Env:$($_)" -Value (Get-EnvironmentVariable -Scope $scope -Name $_) } } #Path gets special treatment b/c it munges the two together $paths = 'Machine', 'User' | % { (Get-EnvironmentVariable -Name 'PATH' -Scope $_) -split ';' } | Select -Unique $Env:PATH = $paths -join ';' # PSModulePath is almost always updated by process, so we want to preserve it. $env:PSModulePath = $psModulePath # reset user and architecture if ($userName) { $env:USERNAME = $userName; } if ($architecture) { $env:PROCESSOR_ARCHITECTURE = $architecture; } if ($refreshEnv) { Write-Output "Finished" } } |