▶️ Как определить папку рабочего стола в #PowerShell
Казалось бы, все просто: "$ENV:userprofile\Desktop". Но это не сработает, если папку переместили. Поэтому обычно советуют реестр:
(Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\')."Desktop"
При этом примерно в половине случаев ошибочно рекомендуют лезть в папку Shell Folders (SF) вместо User Shell Folders (USF). Именно такой неверный совет всплыл в дискуссии чата, по мотивам которой я и пишу этот пост 🙄 Путанице уже очень много лет. По факту USF преобладают над SF, втч над SF в HKLM. Поэтому у пользователя смотреть и править надо именно в USF.
👉 Чтобы не путаться, проще задействовать вполне поддерживаемый метод .NET:
[Environment]::GetFolderPath("Desktop")
Несмотря на внешнюю солидность, метод просто опрашивает реестр 😎 Это легко проверяется с помощью Process Monitor. При этом просматриваются аналогии с древним методом WSH ⌛️ Не случайно все эти способы не работают с объектами, которые появились позже - например, папка Camera Roll (Пленка).
Но самый популярный экспонат - папка Downloads, конечно. Причем в разделе реестра USF у нее даже имени нет, только GUID:
{374DE290-123F-4565-9164-39C4925E467B}
Поэтому в данном случае прямой опрос реестра FTW ✌️