| RFC | RFC0066 |
|---|---|
| Author | Justin Chung |
| Status | Draft |
| SupercededBy | N/A |
| Version | 1.0 |
| Area | Core |
| Comments Due | 05/03/2025 |
| Plan to implement | true |
This RFC proposes moving the current PowerShell user content location out of OneDrive to the AppData directory on Windows machines.
-
PowerShell currently places profile, modules, and configuration files in the user's Documents folder, which is against established conventions for shell configurations and tools.
-
PowerShell content files in OneDrive can lead to unwanted syncing of module files, leading to various issues.
-
There is strong community demand for changing this behavior as the current setup is problematic for many users.
-
Changing the default location would align PowerShell with other developer tools and improve usability.
As a user, I can customize the location where PowerShell user content is installed, so that I can avoid problems created by file sync solutions like OneDrive.
- On startup PowerShell will create a directory in AppData and a configuration file.
- In the configuration file the user scoped PSModulePath will point to AppData/PowerShell/Modules.
- Users can opt out of this new location by specifying a desired user scoped module path in the configuration file.
-
The content folder location change will only apply to PowerShell on Windows.
-
Configurability of the content folder will apply to all systems.
-
This will be an experimental feature.
-
The PowerShell user content folder will be located in the
$env:LOCALAPPDATA\Microsoft\PowerShell. -
A configuration file in the PowerShell user content folder will determine the location of the user scoped PSModulePath.
-
The user will be responsible for specifying thier desired install location using PSResourceGet.
-
The location of Modules is configurable
-
The location of this folder is not configurable.
-
The proposed directory structure:
C:\Users\UserName\AppData\Local\PowerShell
├── PSContent (Configurable) └── PSModulePathConfig.json (Not Configurable)PSContent (Configurable) ├── Scripts (Not Configurable) ├── Modules (Not Configurable) ├── Help (Not Configurable) └── profile.ps1 (Not Configurable)
-
The configuration file:
{ "UserPSContentPath" : "C:\\Users\\User\\PowerShell" }
-
The following functionalities will be affected:
- SecretManagement
-
SecretManagement extension vaults are registered for the current user context in:
$env:LOCALAPPDATA\Microsoft\PowerShell\secretmanagement\secretvaultregistry\When an extension vault is registered, SecretManagement stores the full path to the extension module in the registry. Moving the PowerShell content to a new location will break the vault registrations.
-
- SecretManagement
-
Use the following script to relocate the PowerShell contents folder:
$newPath = "C:\Custom\PowerShell\Modules" $currentUserModulePath = [System.Environment]::GetFolderPath('MyDocuments') + "\PowerShell\Modules" Move-Item -Path $currentUserModulePath -Destination $newPath -Force