Интересное решение захламленности робочего стола Windows 11
Всем привет, это моя первая статья на Хабр, и она будет о том, как я решил проблему того, что все любят всё грузить на рабочий стол.

Все исходники, а также инструкция доступны на Github.
Объяснение к сокращенному термину ПКМ — «правая кнопка мыши».
Все мы люди, и часто нам нужно все структурировать, но мы ленивые создания, и часто мы не хотим этого делать, а просто все закидываем куда попало и потом не можем ничего найти. Если ты узнал себя, то эта статья именно для тебя.
Давайте перейдем к делу и распишем проблемы, с которыми мы сталкиваемся:
Куча файлов на рабочем столе;
Непонятность, что и к чему принадлежит, если не проименовал корректно;
Как ни крути, придется все сортировать.
Что должно получиться:
Продолжать грузить всё на рабочий стол;
Чистый рабочий стол;
Легко всё найти, даже если пришел час чистить рабочий стол.
Перед всем благодарность OpenAI за помощь в написании скрипта, и как вы понимаете, мы будем использовать встроенные утилиты Windows, а именно PowerShell.
Как я видел реализацию, на панели пуска должны быть кнопки, чтобы быстро взаимодействовать с моим решением, и, как понимаете, я этого добился.
Первый раздел. Решение вопроса программно и код
Что если папка и будет рабочим столом?
Я проверил, и действительно, на рабочий стол можно установить любую папку. Это можно сделать, перейдя в проводник и зайдя в его свойства,затем раздел «Расположение».

Но мы же не будем постоянно менять папку, захламлять, и потом снова менять и захламлять, поэтому я нашел решение по автоматизации этого вопроса. Используя PowerShell и GPT, я узнал, что в реестре прописывается конечная папка. GPT выдал такое:
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders | Desktop
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders | Desktop
Почему пути два, я не знаю, но это сейчас и не важно. Еще с курсов университета я знал, что PowerShell могуч, и я решил автоматизировать этот процесс.
Краткое пояснение работы того, как я себе это представлял.
У нас должно быть два скрипта:
один, который создает папку и делает ее рабочим столом;
второй работает как кнопка "вернуться на начальный рабочий стол" и назад в созданную папку.
то должны быть кнопки на панели пуска
Блок с кодом и пояснением, который создает папку и делает ее рабочим столом.
# Получаем текущий путь рабочего стола
$currentDesktopPath = [Environment]::GetFolderPath("Desktop")
# Определяем стандартный путь рабочего стола
$defaultDesktopPath = "C:\Users\$env:USERNAME\Desktop"
# Проверяем, является ли текущий рабочий стол стандартным
if ($currentDesktopPath -eq $defaultDesktopPath) {
# Если рабочий стол стандартный, создаём новую папку
$newFolderName = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$newFolderPath = Join-Path $currentDesktopPath $newFolderName
# Создаём новую папку
New-Item -ItemType Directory -Path $newFolderPath
# Устанавливаем новую папку как рабочий стол
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $newFolderPath
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $newFolderPath
# Перезапускаем Explorer
Stop-Process -Name explorer -Force
Write-Output "Рабочий стол изменён на новую папку: $newFolderPath"
} else {
# Если рабочий стол не стандартный, завершаем выполнение
Write-Output "Текущий рабочий стол не является стандартным. Операция отменена."
}
Вкратце о реализованных идеях:
защита от дурака, а именно, невозможно создать рабочий стол в рабочем столе в рабочем столе и т. д., можно только один раз, это сделано чтобы было удобно;
папка именуется по дате и времени создания;
подсказки в коде.
2. Блок с кодом и пояснением, который работает как кнопка «вернуться на начальный рабочий стол» и обратно в созданную папку:
# Определяем текущий рабочий стол из реестра
$currentDesktopFromRegistry = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders").Desktop
# Определяем стандартный путь к рабочему столу
$defaultDesktopPath = "C:\Users\$env:USERNAME\Desktop"
# Получаем текущую дату в формате yyyy-MM-dd
$currentDate = (Get-Date).ToString("yyyy-MM-dd")
# Проверяем, текущий ли рабочий стол — это стандартный Desktop
if ($currentDesktopFromRegistry -ieq $defaultDesktopPath) {
Write-Output "Текущий рабочий стол — стандартный Desktop: $defaultDesktopPath"
# Получаем список всех папок на рабочем столе
$folders = Get-ChildItem -Path $defaultDesktopPath -Directory
# Ищем папку, имя которой начинается с текущей даты
$targetFolder = $folders | Where-Object { $_.Name -like "$currentDate*" }
# Получаем список всех папок на рабочем столе
$folders = Get-ChildItem -Path $defaultDesktopPath -Directory
# Ищем папки, имя которых начинается с текущей даты
$targetFolders = $folders | Where-Object { $_.Name -like "$currentDate*" }
if ($targetFolders) {
# Сортируем найденные папки по времени создания в порядке убывания
$latestFolder = $targetFolders | Sort-Object CreationTime -Descending | Select-Object -First 1
# Если папка найдена, используем её как рабочий стол
$newDesktopPath = $latestFolder.FullName
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $newDesktopPath
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $newDesktopPath
# Перезапускаем Explorer
Stop-Process -Name explorer -Force
Write-Output "Рабочий стол изменён на папку: $newDesktopPath"
} else {
Write-Output "Папка, начинающаяся с текущей даты ($currentDate), не найдена на рабочем столе."
}
} else {
Write-Output "Текущий рабочий стол отличается от стандартного Desktop. Возвращаемся к стандартному пути."
# Устанавливаем стандартный Desktop как рабочий стол
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "Desktop" -Value $defaultDesktopPath
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" -Name "Desktop" -Value $defaultDesktopPath
# Перезапускаем Explorer
Stop-Process -Name explorer -Force
Write-Output "Рабочий стол возвращён в стандартное место: $defaultDesktopPath"
}
Вкратце о реализованых идеях:
Главным рабочим столом должен быть дефолтный стол (папка Desktop);
ходить туда-сюда;
та кнопка не работает, если некуда возвращаться, чтобы ПК не говорил "у мене є кализия".
Второй раздел. Создание кнопок на панели задач
По умолчанию, Windows запрещает создание стояих кастомных ярлыков или чего-либо еще на панели задач. Но спасибо, Microsoft, что ты не закрытый iPhone или Android.
Как я решил проблему: так как у нас изначально код — это скрипт PowerShell, а PowerShell это программа, то есть мы можем создать ярлык запуска PowerShell и поместить его в каталог.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
В этом каталоге хранятся все ярлыки программ, поэтому мы создаем ярлык, предварительно поместив все наши файлы в созданную папку "script". Это сделано для удобства.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script
На рабочем столе создаем ярлыки.
ПКМ -> Создать -> Ярлык
В поле "укажите расположение объекта" пишем:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoProfile -File "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script\back.ps1"
в поле введите имя для ярлыка пишем:
back
Готово.
Я создал иконки для этих действий, поэтому мы можем сделать все красиво:
ПКМ (по ярлыку) -> Свойства -> Сменить значок -> Обзор..
Сверху в проводнике вставьте скопированный путь.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script
Выберите значок BACK.ico
ПКМ -> Создать -> Ярлык
В поле "укажите расположение объекта" пишем:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoProfile -File "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\script\add.ps1"
в поле введите имя для ярлыка пишем:
add
Готово.
Повторите манипуляции со значком выберя иконку ADD.ico.
Переносим ярлыки в папку:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
После этих манипуляций у вас в Пуске, в программах, появятся два ярлыка. Их можно закрепить на рабочем столе.
Пуск -> Все приложения -> ПКМ по значку -> Дополнительно -> Закрепить на панели задач.
Поздравляю, вы сделали свою жизнь чуточку проще! Если вам понравилась идея или у вас есть дополнения и предложения, пожалуйста, пишите их на моем репозитории на GitHub. Будем развивать эту концепцию вместе!