Как определить, какой шелл-бэг был сохранен последним - windows

Как определить, какой шелл-бэг был сохранен последним - windows
Как определить, какой шелл-бэг был сохранен последним - windows - ashkfor121 @ Unsplash

Я пытаюсь определить, какой пакет оболочки Windows 10 64-bit был сохранен последним, но поскольку у меня 5000 пакетов, параметр "max bag" из powershell бесполезен, а ключ BagMRU в реестре представляет собой очень глубокое дерево (которое идентифицирует несколько десятков "последних пакетов").

Я работаю с ключами в разделе HKCU\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

Есть ли сценарий powershell, который определит последний сохраненный пакет?

Вы можете получить только временную метку последнего изменения ключа

Используя функцию RegQueryInfoKeyA:

[out, optional] lpftLastWriteTime

Указатель на структуру FILETIME, которая получает время последней записи. Этот параметр может быть NULL.

Функция устанавливает члены структуры FILETIME для указания последнего времени изменения ключа или любой из его записей значений.

Add-Type @'
using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;

public class API
{
    [DllImport("Advapi32.dll", SetLastError=true)]
    [return: MarshalAs(UnmanagedType.Error)]
    public static extern int RegQueryInfoKeyA(
        SafeRegistryHandle      hkey,
        uint p2,uint p3,uint p4,uint p5,uint p6,
        uint p7,uint p8,uint p9,uint p10,uint p11,
        ref long                lpftLastWriteTime
    );
}
'@

$KeyPath = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags'

Get-ChildItem $KeyPath | ForEach-Object -Process{
    [long]$lwt = 0
    [API]::RegQueryInfoKeyA(
        $_.Handle,0,0,0,0,0,0,0,0,0,0,[ref]$lwt
    ) | out-null
    [PSCustomObject]@{
        'KeyName'   = $_.PSChildName
        'LastMod'   = [DateTime]::FromFileTime($lwt)
    }
} | sort LastMod -Descending

Выход:

KeyName    LastMod
-------    -------
295        3/8/2023 03:19:13 AM
294        3/8/2023 03:16:28 AM
293        3/8/2023 03:16:18 AM
292        3/8/2023 03:15:25 AM
291        3/8/2023 03:14:28 AM
166        3/8/2023 03:14:23 AM
290        3/6/2023 02:47:23 AM
289        3/6/2023 02:29:46 AM
288        3/6/2023 02:29:03 AM
...

NevaDev, 23 марта 2023 г., 07:10