Статья не полная!
Данный скрипт удалил все (кроме Магазина) modern-приложения (так называемые «метро»-приложения) для текущего пользователя:
Get-AppXPackage | where-object {$_.name –notlike '*store*'} | Remove-AppxPackage
Однако после запуска скрипта, в меню Пуск всё ещё были ярлыки на приложения Офис (Outlook, Word, Excel и PowerPoint). При детальном «осмотре» оказалось, что это ярлыки на вэб-ресурс. Например, для Word ярлык был таким:
https://word.office.com
Таким образом, приложения хоть и удалились, но рекламные ярлыки к ним остались.
Если раскрыть такую группу, то там будут ссылки на соответствующие продукты online:
Я решил разобраться, как же можно вычистить и этот мусор тоже.
Структура меню Пуск
В Windows 10 меню Пуск состоит как бы из двук частей.
Первая — это классический Пуск с иерархией в виде ярлыков или папок. Здесь для большей части ярлыков приложений будут доступны такие опции контекстного меню:
- Pin to Start
- More (Pin to taskbar, Run as administrator, Open file location)
- Uninstall
Вторая часть — это пространство с плитками. В этой части у ярлыков есть такие общие команды:
- Unpin from Start
- Resize
- More (Pin to taskbar, Run as administrator, Open file location)
- Uninstall
Так вот для ярлыков-плиток офиса были доступны только такие варианты:
- Unpin from Start
- Resize
- More (Turn Live Tile on)
«Классическая» часть меню Пуск генерируется из списка файлов и папок, которые находятся в общем профиле пользователя:
C:\Users\All Users\Microsoft\Windows\Start Menu\Programs
Это то же самое, что и такая папка:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
Плюс личные ярлыки пользователя:
C:\Users\<USER>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
В этом случае вложенные папки могут быть, но отображатся в Пуске будет только родительская папка, минуя вложенные папки.
Например, вы откроете в Проводнике папку C:\Users\<USER>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell.
В ней создадите вложенные папки x86 и x64.
Затем туда поместите ярлыки Windows PowerShell (x86) и Windows PowerShell соответственно, то в Пуске всё равно будет видна только ОДНА папка Windows PowerShell, в ней будут объединены ярлыки из двух вложенных папок. При этом в Пуске не будет видно вложенных папок.
«Плиточная» часть меню Пуск генерируется из xml-таблицы. Она хранится где-то в памяти, но эту структуру можно сохранить в файл:
Export-StartLayout -UseDesktopApplicationID -Path $Env:TEMP\startlayout.xml
В данном примере плитки и их расположение будут сохранены в файл во временной папке:
C:\Users\<USER>\AppData\Local\Temp\startlayout.xml
Структура файла startlayout.xml
Сохранённый файл будет таким:
<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6">
<start:Group Name="Productivity">
<start:Folder Name="" Size="2x2" Column="2" Row="0">
<start:SecondaryTile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" TileID="38975140460" DisplayName="" Size="2x2" Column="2" Row="2" Arguments="-contentTile -url 0 https://powerpoint.office.com" Square71x71LogoUri="ms-appdata:///local/PinnedTiles/38975140460/tinytile.png" Square150x150LogoUri="ms-appdata:///local/PinnedTiles/38975140460/squaretile.png" Wide310x150LogoUri="ms-appx:///" Square310x310LogoUri="ms-appx:///" ShowNameOnSquare150x150Logo="true" ShowNameOnWide310x150Logo="false" BackgroundColor="#ff8f2d15" ForegroundText="light" />
<start:SecondaryTile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" TileID="6501008900" DisplayName="" Size="2x2" Column="4" Row="0" Arguments="-contentTile -url 0 https://excel.office.com" Square71x71LogoUri="ms-appdata:///local/PinnedTiles/6501008900/tinytile.png" Square150x150LogoUri="ms-appdata:///local/PinnedTiles/6501008900/squaretile.png" Wide310x150LogoUri="ms-appx:///" Square310x310LogoUri="ms-appx:///" ShowNameOnSquare150x150Logo="true" ShowNameOnWide310x150Logo="false" BackgroundColor="#ff104026" ForegroundText="light" />
<start:SecondaryTile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" TileID="26310719480" DisplayName="" Size="2x2" Column="0" Row="0" Arguments="-contentTile -url 0 https://outlook.com" Square71x71LogoUri="ms-appdata:///local/PinnedTiles/26310719480/tinytile.png" Square150x150LogoUri="ms-appdata:///local/PinnedTiles/26310719480/squaretile.png" Wide310x150LogoUri="ms-appx:///" Square310x310LogoUri="ms-appx:///" ShowNameOnSquare150x150Logo="true" ShowNameOnWide310x150Logo="false" BackgroundColor="#ff06417a" ForegroundText="light" />
<start:SecondaryTile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" TileID="7603651830" DisplayName="" Size="2x2" Column="2" Row="0" Arguments="-contentTile -url 0 https://word.office.com" Square71x71LogoUri="ms-appdata:///local/PinnedTiles/7603651830/tinytile.png" Square150x150LogoUri="ms-appdata:///local/PinnedTiles/7603651830/squaretile.png" Wide310x150LogoUri="ms-appx:///" Square310x310LogoUri="ms-appx:///" ShowNameOnSquare150x150Logo="true" ShowNameOnWide310x150Logo="false" BackgroundColor="#ff15366b" ForegroundText="light" />
</start:Folder>
<start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.WindowsStore_8wekyb3d8bbwe!App" />
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
Применение файла с экспортированной конфигурацией расположения плиток меню Пуск
Как было сказано выше, Export-StartLayout экспортирует настройки расположения плиток меню Пуск для текущего пользователя. Нам это подошло, поэтому мы использовали данный командлет. По логике, для импортирования сохранённых ранее настроек, нам может потребоваться Import-StartLayout. Однако тут есть проблема — данная операция импортирует настройки для примонтированного образа Windows. Т.е. не для текущего пользователя, а для дефолтового. Нам это не нужно. После продолжительного копания, выяснилось, что эти настройки можно применить через групповые политики, запустив gpedit.msc (здесь нам нужны настройки только на уровне пользователя, а не всей машины, поэтому выбираем User Configuration).
Полный путь будет такой:
▶ ▶ ▶ ▶ :
Здесь нам нужно включить эту политику (Enabled) и вписать путь для «Start Layout File» — это тот самый .XML-файл, в который мы экспортировали конфигурацию расположения плиток.
После изменения этой политики нужно завершить сеанс пользователя, либо перезагрузить компьютер.
Для решения этой проблемы нам пригодится элемент <DefaultLayoutOverride>. Нам необходимо заменить его на такую строчку:
<DefaultLayoutOverride LayoutCustomizationRestrictionType="OnlySpecifiedGroups">
Применив данный файл шаблона, в начале названия группы плиток появится значок замочка. Он означает, что данная группа заблокирована для редактирования пользователем. При этом всё остальное пространство для плиток можно настраивать пользователю как ему удобно!
Место расположения файла DefaultLayouts.xml в этой папке профиля пользователя:
C:\Users\<USER>\AppData\Local\Microsoft\Windows\Shell\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount
Поскольку всё это в двоичном виде, то можно это лишь копировать и восстанавливать. Но изменять, увы, нельзя. По крайней мере я не знаю алгоритма.
Значит будем править и восстанавливать через политики.
Изменение конфигурации расположения плиток меню Пуск через реестр
Через политики нам получилось изменить расположение плиток, но нужно сделать этот как-то через скрипт. Данную политику можно записать напрямую в реестр (необходимы права админа), путь будет таким:
HKCU\Software\Policies\Microsoft\Windows\Explorer
Сам путь будет хранится в ключе StartLayoutFile, хотя напрямую нам это мало поможет, т.к. данное значение будет в формате REG_EXPAND_SZ:
То есть эта строка для нас практически нечитаема:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer]
"LockedStartLayout"=dword:00000001
"StartLayoutFile"=hex(2):43,00,3a,00,5c,00,55,00,73,00,65,00,72,00,73,00,5c,00,\
44,00,65,00,6e,00,69,00,73,00,5c,00,44,00,6f,00,63,00,75,00,6d,00,65,00,6e,\
00,74,00,73,00,5c,00,73,00,74,00,61,00,72,00,74,00,6c,00,61,00,79,00,6f,00,\
75,00,74,00,2d,00,73,00,68,00,6f,00,72,00,74,00,2e,00,78,00,6d,00,6c,00,00,\
00
В данном случае для нас это не такая большая проблема, т.к. мы планируем использовать скрипт.
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024