using namespace Microsoft.Win32;

$null = New-Module {
    function Edit-DefaultUserKey {
        param(
            [scriptblock] $Action
        )

        $rootPath = "HKLM:\DefaultUser";
        $regRootPath = $rootPath -replace "^(\w+):([\\/]|$)","`$1`$2";
        $hivePath = "$env:SystemDrive\Users\Default\NTUSER.dat";
        $null = & reg load $regRootPath $hivePath;
        [RegistryKey] $root = Get-Item $rootPath;
        & $Action -Key $root;
        $root.Handle.Close();
        [System.GC]::Collect();
        & reg unload $regRootPath;
    }
}