You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #27632 introduces the MachineFolder per-machine writable data store for MSIX-packaged PowerShell (design: #27697), relocating system-wide (AllUsers) config and profile out of the immutable $PSHOME and merging three scopes.
Experimental features are intentionally excluded from that work and left exactly as they behave today. This issue tracks bringing experimental features into the MachineFolder model in a follow-up.
Experimental features do not participate in the MachineFolder scope:
Reads — PowerShellConfig.GetExperimentalFeatures() reads CurrentUser, falling back to AllUsers ($PSHOME). Same as non-packaged installs.
Writes — Enable-/Disable-ExperimentalFeature -Scope AllUsers is not redirected to the MachineFolder (allowMachineFolderRedirect: false). Under MSIX the write therefore targets the read-only $PSHOME and fails — identical to the pre-existing behavior on a packaged build. -Scope CurrentUser is unaffected and works normally.
This keeps $PSHOME config as read-only product defaults and avoids a half-wired state where writes silently land in the MachineFolder while reads ignore it.
Why it was deferred
The legacy on-disk shape is a single "ExperimentalFeatures": [ ... ]enabled list, which cannot correctly express "the admin disabled an in-box preview feature that ships enabled" once the list is split across three merged scopes. Naively relocating the list to the MachineFolder produced a bug where disabling a second feature re-enabled the first, and inverted AllUsers/CurrentUser precedence in ways we did not want to ship unreviewed. Designing the correct schema (explicit enabled and disabled sets, plus a defined merge precedence consistent with the policy/preference rules in #27697) is its own change.
Desired future behavior
Represent experimental-feature state so that enabled and disabled deltas are both expressible per scope (not just a flat enabled list).
Define and document the merge precedence for experimental features across MachineFolder / $PSHOME / CurrentUser, and decide whether it follows the policy order (machine wins) or the preference order (user wins).
Preserve backward compatibility for existing powershell.config.json files that use the flat enabled list.
Scope / notes
In scope: schema for enable/disable deltas, MachineFolder read+write for experimental features, merge precedence + docs, migration/back-compat for the flat list.
Summary
PR #27632 introduces the MachineFolder per-machine writable data store for MSIX-packaged PowerShell (design: #27697), relocating system-wide (
AllUsers) config and profile out of the immutable$PSHOMEand merging three scopes.Experimental features are intentionally excluded from that work and left exactly as they behave today. This issue tracks bringing experimental features into the MachineFolder model in a follow-up.
Current behavior (after #27632)
Experimental features do not participate in the MachineFolder scope:
PowerShellConfig.GetExperimentalFeatures()readsCurrentUser, falling back toAllUsers($PSHOME). Same as non-packaged installs.Enable-/Disable-ExperimentalFeature -Scope AllUsersis not redirected to the MachineFolder (allowMachineFolderRedirect: false). Under MSIX the write therefore targets the read-only$PSHOMEand fails — identical to the pre-existing behavior on a packaged build.-Scope CurrentUseris unaffected and works normally.This keeps
$PSHOMEconfig as read-only product defaults and avoids a half-wired state where writes silently land in the MachineFolder while reads ignore it.Why it was deferred
The legacy on-disk shape is a single
"ExperimentalFeatures": [ ... ]enabled list, which cannot correctly express "the admin disabled an in-box preview feature that ships enabled" once the list is split across three merged scopes. Naively relocating the list to the MachineFolder produced a bug where disabling a second feature re-enabled the first, and invertedAllUsers/CurrentUserprecedence in ways we did not want to ship unreviewed. Designing the correct schema (explicit enabled and disabled sets, plus a defined merge precedence consistent with the policy/preference rules in #27697) is its own change.Desired future behavior
-Scope AllUserswrites only the changed feature(s) to the MachineFolder (delta-only, consistent with the rest of Place System-Wide Config in the Machine Folder for MSIX Packages #27632), leaving$PSHOMEdefaults intact.MachineFolder/$PSHOME/CurrentUser, and decide whether it follows the policy order (machine wins) or the preference order (user wins).powershell.config.jsonfiles that use the flat enabled list.Scope / notes
AllUsersunder MSIX (PS7-packaged: Update-Help -Scope AllUsers fails under MSIX ($PSHOME read-only) #27699), session-config relocation (Some cmdlets and config require writing to $PSHOME\SessionConfig folder #9278).References