Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Paths for "TMP" & "TEMP" are overriden when running "refreshenv" as "SYSTEM" #3681

@michiexe

Description

@michiexe

Checklist

  • I confirm there are no unresolved issues reported on the Chocolatey Status page.
  • I have verified this is the correct repository for opening this issue.
  • I have verified no other issues exist related to my problem.
  • I have verified this is not an issue for a specific package.
  • I have verified this issue is not security related.
  • I confirm I am using official, and not unofficial, or modified, Chocolatey products.

What You Are Seeing?

Issue description

The problem seems to be, that when the "refreshenv"/"Update-SessionEnvironment"-command is run from a PowerShell session, that was started from the "SYSTEM"-user/-context, that the values of the "TMP" & "TEMP" environment variables are being overriden in the current PowerShell session. The changed values only affect the current PowerShell session.

The values of "TMP" & "TEMP" in the PowerShell session seem to be set to:
"C:\Windows\system32\config\systemprofile\AppData\Local\Temp"

Additional Information

I confirmed this issue to arise on the following chocolatey versions:

  • 2.4.3
  • 2.4.1
  • 2.3.0

I confirmed this issue to not arise in the following chocolatey versions:

  • 1.4.0
  • 2.0.0
  • 2.2.2

My educated guess is, that the issue was created somewhere between the cocolatey versions 2.2.2 and 2.3.0.

What is Expected?

The values of "TMP" & "TEMP" should not be changed from "C:\Windows\TEMP" to "C:\Windows\system32\config\systemprofile\AppData\Local\Temp" in the current PowerShell session.

How Did You Get This To Happen?

Important note:

I have created two PowerShell scripts to make it easy to reproduce the issue as my actual use-case is too complicated to reproduce otherwise. These scripts reprocude the root cause of the issue I am experiencing.

I cannot confirm or deny, if the issue also arises, when the same actions are not executed in a Windows-Task and instead run as "SYSTEM" directly.

run-test.txt
setup-test.txt

I believe this issue might also have a similar cause as: #2044


Steps to reproduce:

  1. Create a folder somewhere. (I created mine at "C:\gitIssueTest")
  2. Download the files I have attached (look above) and place them in the folder you just created.
  3. Screen the two files!
  4. After screening the files and confirming they are non-malicious, rename their file-endings from ".txt" to ".ps1".
  5. Open an elevated (!) PowerShell session and navigate to the created folder.
  6. Run "setup-test.ps1" via .\setup-test.ps1 (only once!). This creates a Windows-Task, which itself executes the "run-test.ps1" script. This is neccessary, because this is the way I ran into the issue.
  7. In the same PowerShell session run Start-ScheduledTask -TaskName "GitHubIssueTest".
  8. Refresh the contents of the folder you have created earlier. You should find a file "output.txt"
  9. Open the "output.txt" file. It should now contain this text:

Transcript started, output file is C:\gitIssueTest\output.txt
Values before running refreshenv/Update-SessionEnvironment

TEMP-path: C:\Windows\TEMP
TMP-path: C:\Windows\TEMP

Refreshing environment variables from the registry for powershell.exe. Please wait...
Finished

TEMP-path: C:\Windows\system32\config\systemprofile\AppData\Local\Temp
TMP-path: C:\Windows\system32\config\systemprofile\AppData\Local\Temp

  1. You can now remove the Windows-Task by running Unregister-ScheduledTask -TaskName "GitHubIssueTest" -Confirm:$false. The folder you created earlier can also be deleted now.

System Details

  • Operating System: 10.0.20348.0
  • Windows PowerShell version:
Name                           Value
----                           -----
PSVersion                      5.1.20348.2849
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.20348.2849
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
  • Chocolatey CLI Version: 2.4.3
  • Chocolatey Licensed Extension version: Chocolatey v2.4.3
  • Chocolatey License type: ?
  • Terminal/Emulator: Windows PowerShell

Installed Packages

Chocolatey v2.4.3
autologon 3.10.0.20200924
chocolatey 2.4.3
chocolatey-compatibility.extension 1.0.0
chocolatey-core.extension 1.4.0
chocolatey-windowsupdate.extension 1.0.5
dotnet-6.0-desktopruntime 6.0.26
KB2919355 1.0.20160915
KB2919442 1.0.20160915
KB2999226 1.0.20181019
KB3033929 1.0.5
KB3035131 1.0.3
KB3063858 1.0.0
keystore-explorer.portable 5.5.3
notepadplusplus 8.6.2
notepadplusplus.install 8.6.2
openjdk17 17.0.2.20220913
OpenSSL.Light 3.1.4
Temurin17 17.0.10
vcredist140 14.38.33135
19 packages installed.

Output Log

Not applicable, as no log is created.

Additional Context

Additional information:

I have also skimmed through the sources and I presume, that the issue may be contained in the UpdateSession method/function in this file: Chocolatey.PowerShell/Helpers/EnvironmentHelper.cs
I cannot explain how, but at some point SYSTEM seems to have to be be added to scopeList, as far as I can understand the code. The source-code is also a bit weird, as EnvironmentVariables contains only the "names"/"keys" of the environment variables, apart from the field System, which is used as the value in the comparison in the EnvironmentHelper, which is a bit inconsistent.

var computerName = GetVariable(cmdlet, EnvironmentVariables.ComputerName, EnvironmentVariableTarget.Process);

// User scope should override (be checked after) machine scope, but only if we're not running as SYSTEM
if (userName != computerName && userName != EnvironmentVariables.System)
{
    scopeList.Add(EnvironmentVariableTarget.User);
}

Metadata

Metadata

Assignees

Labels

5 - ReleasedThe issue has been resolved, and released to the public for consumption.BugIssues where something has happened which was not expected or intended.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions