Cbspreview windows 10 что это такое

CBSPreview (Component-Based Servicing Preview) – это новый подход к обновлениям операционной системы Windows 10, который был введен компанией Microsoft. Эта технология призвана сделать процесс обновления Windows более гибким и надежным.

В отличие от старых методов обновления, основанных на полной замене файлов и компонентов, CBSPreview использует подход на основе компонентов. Это позволяет обновлять только те компоненты, которые изменились или требуют обновления, минуя неизменные части системы. Таким образом, процесс обновления становится более быстрым и экономит ресурсы.

CBSPreview Windows 10 также предоставляет пользователям возможность просматривать и устанавливать обновления до их реального выпуска. Благодаря этому, пользователи могут проверить новые функции и исправления безопасности, и принять решение о том, нужно ли обновляться или отложить обновление на более удобное время.

CBSPreview Windows 10 является инновационным подходом к обновлению операционной системы, который делает этот процесс более гибким и удобным для пользователей. Отказываясь от полной замены файлов, CBSPreview позволяет экономить время и ресурсы при обновлении Windows 10.

Содержание

  1. Что такое CBSPreview Windows 10?
  2. Принцип работы CBSPreview Windows 10
  3. Возможности CBSPreview Windows 10

Что такое CBSPreview Windows 10?

CBSPreview использует компонентную модель обновления, которая позволяет разделить обновления на отдельные компоненты и применять их независимо друг от друга. Это позволяет более эффективно управлять обновлениями, упростить их установку и решить возможные проблемы, связанные с обновлениями.

В процессе CBSPreview Windows 10 собирает, анализирует и тестирует обновления перед их выпуском. Это позволяет определить возможные проблемы и исправить их до того, как обновления попадут к пользователям. CBSPreview также обеспечивает совместимость компонентов с уже установленной операционной системой, что минимизирует риск возникновения ошибок или сбоев после обновления.

CBSPreview Windows 10 является важным инструментом для обеспечения безопасности и стабильности операционной системы. Он помогает Microsoft предварительно проверить обновления, устранить возможные проблемы и обеспечить безопасность пользовательских данных и системы в целом.

Вкратце, CBSPreview Windows 10 — это процесс предварительной проверки и тестирования обновлений перед их установкой, который помогает гарантировать стабильность и безопасность операционной системы для пользователей.

Принцип работы CBSPreview Windows 10

Когда обновление становится доступным для установки, операционная система предоставляет пользователю возможность знакомства с изменениями, которые оно вносит в систему. CBSPreview отображает список изменений, предоставленных Microsoft, и позволяет пользователям выбрать, какие из них они хотят установить.

Процесс работы CBSPreview включает следующие шаги:

  1. Windows 10 отображает список доступных обновлений, сгруппированных по категориям.
  2. Пользователь может просмотреть подробности каждого обновления, включающие описание изменений и соответствующие ссылки на дополнительную информацию.
  3. Пользователь может выбрать, какие из обновлений он хочет установить, и снять галочки с тех, которые не желает устанавливать.
  4. После выбора необходимых обновлений, пользователь нажимает кнопку «Установить», и операционная система начинает загружать и устанавливать выбранные обновления.

Преимущества CBSPreview заключаются в том, что оно позволяет пользователям контролировать процесс обновления и избежать установки нежелательных изменений. Это позволяет сохранить стабильность и безопасность операционной системы и предотвратить возможные проблемы после обновления.

CBSPreview — это важная функция в Windows 10, которая помогает пользователям принимать информированные решения о обновлении своей операционной системы.

Возможности CBSPreview Windows 10

CBSPreview Windows 10 предлагает ряд функций и возможностей для оптимизации работы операционной системы. Вот некоторые из них:

  • Предварительный просмотр обновлений: CBSPreview позволяет пользователям просматривать и тестировать предстоящие обновления для Windows 10, прежде чем они будут выпущены официально. Это позволяет пользователю ознакомиться с новыми функциями и исправлениями ошибок до их официального релиза.
  • Более стабильные обновления: CBSPreview помогает обеспечить стабильность и надежность обновлений, создавая возможность протестировать и исправить проблемы, которые могут возникнуть с новыми версиями операционной системы перед их выпуском на все устройства.
  • Участие в программе Windows Insider: CBSPreview предоставляет доступ к программе Windows Insider, которая позволяет пользователям получить ранний доступ к новым функциям и обновлениям Windows 10. Это позволяет пользователям быть в курсе последних изменений и вносить свой вклад в разработку операционной системы.
  • Обратная связь и улучшение продукта: CBSPreview предлагает возможность отправлять отзывы и отчеты об ошибках, что помогает Microsoft улучшать свою операционную систему и исправлять проблемы до ее официального релиза.

В целом, CBSPreview Windows 10 предоставляет пользователям уникальную возможность влиять на развитие и улучшение операционной системы, а также быть впереди официальных обновлений и исправлений.

Windows 10 – это самая новая операционная система от Microsoft, которая является промежуточным звеном между Windows 7 и Windows 8. После запуска Windows 8, компания приняла решение разработать новую версию, удовлетворяющую ожиданиям пользователей и объединяющую лучшие качества предыдущих операционных систем.

Одной из самых интересных новых возможностей Windows 10 является Cbspreview, предназначенный для предварительного просмотра обновлений и исправлений. Cbspreview позволяет пользователям узнать о будущих изменениях, которые возможно появятся в операционной системе в ближайшее время. Это полезное средство для получения информации о новых функциях и улучшениях, а также позволяет опробовать их заранее.

Важно отметить, что Cbspreview является бета-версией, поэтому могут возникать проблемы с работой и стабильностью системы. Новые функции и исправления могут быть изменены или удалены в финальной версии операционной системы.

Для доступа к Cbspreview необходимо зарегистрироваться в программе Windows Insider. После регистрации пользователи получают доступ к бета-версии операционной системы и могут стать частью тестирования и обратной связи с разработчиками. Регистрация в программе Windows Insider бесплатна и доступна всем желающим.

Cbspreview windows 10: ознакомление и функции

Cbspreview (Committed Bytes Snapshot) — это функция в Windows 10, которая позволяет пользователю получить снимок занятого дискового пространства и физической памяти в определенный момент времени. Она отображает, какие файлы и процессы занимают вашу память и диск, чтобы вы могли принять меры для оптимизации и освобождения ресурсов.

Основная цель Cbspreview — это помочь вам оптимизировать использование памяти и дискового пространства в Windows 10. Это особенно полезно, когда вы испытываете проблемы с быстродействием или у вас заканчивается свободное место на диске.

Для использования Cbspreview в Windows 10, вам нужно войти в «Диспетчер задач». Откройте его, щелкнув правой кнопкой мыши на панели задач и выбрав «Диспетчер задач». Затем выберите вкладку «Производительность» и кликните на кнопку «Cbspreview».

После того, как вы активировали Cbspreview, вы увидите таблицу, которая показывает ваше использование памяти и дискового пространства. Она содержит информацию о файлах, процессах, памяти и диске, которые занимают наибольшее количество ресурсов. Вы сможете увидеть, какие файлы являются наиболее засоряющими вашу систему и сколько места они занимают.

Одна из полезных функций Cbspreview в Windows 10 — это возможность освобождать ресурсы. Вы можете выбрать файлы или процессы из таблицы и щелкнуть правой кнопкой мыши, чтобы освободить память или удалить файлы. Это поможет вам оптимизировать использование ресурсов и улучшить производительность вашей системы.

Ознакомление с Cbspreview в Windows 10 предоставляет пользователю возможность более глубокого понимания использования памяти и дискового пространства. Оно помогает в оптимизации ресурсов и улучшении производительности системы. Будучи интуитивным и простым в использовании инструментом, Cbspreview обеспечивает пользователю полный контроль над ресурсами и гарантирует, что система работает на высоком уровне.

Таким образом, Cbspreview является важным компонентом Windows 10, который помогает пользователям оптимизировать использование памяти и дискового пространства. Регулярное использование Cbspreview поможет вам держать вашу систему в оптимальном состоянии и повысит эффективность ее работы.

Статья позволяет вам более глубоко разобраться в Cbspreview в Windows 10 и использовать данную функцию для оптимизации вашей системы. Cbspreview дает вам возможность контролировать использование ресурсов и улучшать производительность вашего компьютера.

Основные функции Cbspreview windows 10

Cbspreview windows 10 представляет собой программное обеспечение, которое позволяет пользователям получить предварительный просмотр новых функций операционной системы Windows 10. Это инструмент, который помогает вам оценить и протестировать новые возможности перед их официальным выпуском.

Вот некоторые основные функции Cbspreview windows 10:

1. Предварительный просмотр новых функций: Cbspreview windows 10 позволяет пользователям получить доступ к новым функциям и улучшениям операционной системы до их официального запуска. Это дает пользователям возможность изучить и протестировать эти новые возможности и решить, стоит ли им обновлять свою систему при выходе полной версии.

2. Обратная связь и отчеты об ошибках: Cbspreview windows 10 также предлагает возможность предоставления обратной связи и сообщений об ошибках команде разработчиков Microsoft. Это помогает улучшить операционную систему и исправить возможные проблемы до ее официального выпуска.

3. Интеграция облачных сервисов: Cbspreview windows 10 предлагает обширную интеграцию с облачными сервисами Microsoft, такими как OneDrive и Office 365. Это позволяет пользователям получить дополнительные возможности и удобства при работе с файлами и документами.

4. Улучшения безопасности: Cbspreview windows 10 также включает в себя улучшения в области безопасности, которые помогают защитить вашу систему от вредоносного программного обеспечения и других угроз. Это включает в себя обновления безопасности и новые функции, такие как Windows Hello, которые позволяют вам использовать биометрические данные для входа в систему.

5. Новый пользовательский интерфейс: Cbspreview windows 10 также включает в себя новый пользовательский интерфейс, который предлагает обновленный дизайн и улучшенную навигацию. Это делает использование операционной системы более простым и удобным для пользователей.

В целом, Cbspreview windows 10 предлагает пользователям доступ к новым функциям операционной системы Windows 10 до их официального выпуска. Это позволяет пользователям исследовать и оценить эти функции, а также дать обратную связь и сообщить о возможных ошибках разработчикам. Кроме того, он предлагает улучшения в области безопасности, интеграцию облачных сервисов и новый пользовательский интерфейс для более удобного использования системы.

Автор Сообщение
 

СообщениеДобавлено: 24.12.2019 10:15 

[профиль]

Member

Статус: Не в сети
Регистрация: 26.06.2010
Откуда: От туда.

SilentComputer писал(а):

Сейчас в 1909 версии винды, там уже новые заморочки

Которые напрочь убили звуковую схему: в спутниковом тюнере звука нет!!! Драйвера тоже пока никто не обновил и обновят ли, неизвестно. Все ссылки на старые дрова на сайте производителя убраны от греха.
Как жить, как жить… :facepalm: :D
Да и полугодичное крупное обновление не хочу лицезреть у себя в системе, которое вернёт все вырезанное. На LTSC спокойней в этом плане: впереди 10 лет и никаких заморочек с переходами. Ну и в 2020-м обещают новую LTSC, недолго ждать остается.

Кстати, westlife вместе с AutoSettingsPS распространяет скрипт по выпилке хлама в LTSC: RepackWIMPS.


_________________
GA-Z97X-UD5H/Intel Core i7-4790K/Inte HD Graphics 4600/SSD PLEXTOR PX-256M5S/Crucial DDR3 32gb/Nec 26″/Creative Elite Pro/Tevii 470/W7-10 (19044)

Реклама

Партнер
 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

Вот еще, по поводу винапдейта — к вопросу, нужен/ненужен он?
Когда ставил насвежо версию 1909 на нубуке — сразу после установки (ничо не твикал, не удалял, и т.д. — а сама винда, оем-лицензия нубука), иногда проскакивали бсоды
Запустил винапдейт, обновился им до актуального состояния (там, 2 кумулятива ставилось, и еще пару каких-то апдейтов)
Бсоды, ушли
Видимо на момент первого релиза 1909, версия та была крайне сыра еще

Lukamor писал(а):

Да и полугодичное крупное обновление не хочу лицезреть у себя в системе, которое вернёт все вырезанное.

Задание сделать в планировщике, для батника который чистит
В плюс, надо учесть — что обновы, они не только могут вернуть вырезанное — но и также, навалить уже новое что-то :)
Ох и гораздый бывает порой… на выдумку, дядя майк… :)

Lukamor писал(а):

На LTSC спокойней в этом плане: впереди 10 лет и никаких заморочек с переходами. Ну и в 2020-м обещают новую LTSC, недолго ждать остается.

LTSC, это та же винда 10 — только, с допхламом в виде групповых политик, доменных дел, и т.д.


_________________
silentcomputer.000webhostapp.com

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

Автор проделал отличную работу. Позволю себе немного поправить его. Да не в обиде будет))

1. Какой смысл использовать хомяковую версию 10-ки, если в корпоративных версиях, в первую
очередь LTSC:

— 80% удаляемого мусора уже отсутствует. Смысл напрягаться, если майки уже напряглись за тебя?
Меньше проделанной работы — ниже вероятность допущенной ошибки.
— Пара слов про политик. Хомяковая редакция — по сути, неуправляемая, кто бы что ни говорил!
Поясню. Групповые политики в ней отсутствуют, а через них в 10-ке сосредоточено ВСЕ
управление. Настройки в Параметрах — по большей части фикция, призванная внушить усеру, что он
может чем-то «управлять» и что-то «настраивать» или содержит несуществен. настройки. Параметры
политик в реестре, за что ратует автор, — НЕ ЗАМЕНЯЮТ применение самих политик, поскольку
могут слететь после любого обновления системы и тем более глобального обновления, когда
система обновится на другой билд. Слетание настроек в реестре происходит, т.к. это
неполноценная «настройка»; когда вы правите политику через gpedit.msc, ее настройки хранятся
помимо реестра в файлах Registry.pol!
Далее. Да я вкурсе, что можно включить GPO в HOME. Здесь появится следующая проблема. НЕ ВСЕ
настройки политик применяются в HOME. Не все настройки политик применяются даже в Про-версии.
Да, вы ее выставите «по-правильному», но бестолку. Иногда (не всегда!) это обговаривается в
описании политик — читайте внимательно. Напр., настройка телеметрии в 0 — в обычной Про и Home
не работают, хотя выставить можно. Корпоративные редакции этого недостатка лишены.А если вам
это несущественно, тогда зачем вообще было поднимать эту тему и лезть в такие дебри?
К слову, единожды сделанные настройки через GPO отлично бэкапятся и восстанавливаются из
бэкапа. Провернете такой фокус с реестром? Аааа…надо каждую настройку куста выгружать и
потом компоновать в один reg-файл)) для применения впоследствии.

2. Используемый способ удаления нужен ТОЛЬКО ДЛЯ СИСТЕМНЫХ uwp-приложений, обычные прекрасно
удаляются через консоль PS с правами обычного админа, а если еще и удалить соотв.
provisioned-пакеты из системной учетки…отключив автоустановку рекомендуемых
приложений…красота! Кому нужно только это — не стоит заморачиваться с StateRepository-
Machine.srd.

3. Используемый способ запуска DB Browser for SQLite от имени системы…ну такое
себе…Знаете, штаны через голову тоже можно одевать. Не проще заюзать приложения попроще,
напр., RunAsSystem от apreltech.com, на сайте отсутствует — юзайте гугл. К тому же, если вы не
используете DB Browser for SQLite как редактор, запускать его от имение системы НЕ
ОБЯЗАТЕЛЬНО! Посмотреть — скопировать содержимое столбцов PackageFullName и IsInbox —
достаточно обычного запуска от админа.

4. Прогу DB Browser for SQLite юзать МОЖНО и даже НУЖНО — для тех кто хочет делать все собств.
руками, не полагаясь ни на кого. Этот способ РАБОТАЕТ — проверно собственноручно сначала на
виртуалке, затем на собственной живой системе. Все упирается в триггеры, не позволяющие
редактировать столбец IsInbox. С ними редактирование строк в IsInbox приводит к ошибке «no
such function: workid» Я работал с LTSC 1809, говорю про нее.
Чтобы поправить IsInbox с 1 на 0, нужно сделать бэкап нужных триггеров, удалить их, исправить
IsInbox в 0, вернуть триггеры. После этого большинство системных приложений появятся в
Параметрах — Приложения и будут доступны к удалению обычным (не через PS) способом.

5. Вот список триггеров в 1809 LTSC, мешающих редатрированию IsInbox:
1. CREATE TRIGGER TRG_AFTER_UPDATE_Package_SRJournal AFTER UPDATE ON Package FOR EACH ROW
BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_Revision,
_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT 1,
workid(), 1, 2, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s
CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=NEW.PackageFullName;END
2. CREATE TRIGGER TRG_AFTERDELETE_Package_Key AFTER DELETE ON Package FOR EACH ROW WHEN
is_triggers_enabled() AND OLD._WorkId=0 BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE
Id=1;INSERT OR REPLACE INTO PackageChangelog(_Revision, _WorkId, _Created, _Deleted,
PackageFullName, _PackageID, WhenOccurred, _Dictionary)SELECT 1, workid(), OLD._Created,
s.LastValue, OLD.PackageFullName, OLD._PackageID, now(), NULL FROM Sequence AS s WHERE
s.Id=1;END
3. CREATE TRIGGER TRG_AFTERINSERT_Package AFTER INSERT ON Package FOR EACH ROW BEGIN INSERT OR
IGNORE INTO PackageIdentity (PackageFamily, PackageFullName) VALUES(NEW.PackageFamily,
NEW.PackageFullName);UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO
SRJournal(_Revision, _WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred,
SequenceId)SELECT 1, workid(), 1, 1, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue
FROM Sequence AS s CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND
pi.PackageFullName=NEW.PackageFullName;END
4. CREATE TRIGGER TRG_AFTERINSERT_Package_Key AFTER INSERT ON Package FOR EACH ROW WHEN
is_triggers_enabled() AND NEW._WorkId=0 AND NEW._Created=0 BEGIN DELETE FROM PackageChangelog
WHERE NEW._Created=0 AND PackageFullName=NEW.PackageFullName;END
5. CREATE TRIGGER TRG_AFTERUPDATE_Package__Created_LongRunningTransactionUpdateDuringCommit
AFTER UPDATE OF _Created ON Package FOR EACH ROW WHEN OLD._Created=-2 AND NEW._Created>0 BEGIN
DELETE FROM PackageChangelog WHERE PackageFullName=NEW.PackageFullName;END
6. CREATE TRIGGER TRG_BEFOREDELETE_Package_SRJournal BEFORE DELETE ON Package FOR EACH ROW
BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_Revision,
_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT 1,
workid(), 1, 3, OLD._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s
CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=OLD.PackageFullName;END
7. CREATE TRIGGER TRG_IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId BEFORE
INSERT ON Package FOR EACH ROW BEGIN SELECT CASE WHEN ((SELECT _PackageID FROM Package WHERE
PackageFamily=NEW.PackageFamily AND ResourceId IS NEW.ResourceId AND
Architecture=NEW.Architecture AND Version=NEW.Version AND _WorkId=NEW._WorkId) IS NOT NULL)
THEN RAISE(ABORT, ‘INSERT INTO «Package» violates the unique index
«IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId»‘)END;END

6. Для бэкапа + исправления на 0 + восстановления триггеров удобно использовать
автоматизированный скрипт «windows_app-deployment_database_modification_script.txt» отсюда:

https://pastebin.com/uJhpXD7j

Предварительно скрипт отредактировать, указав ПОЛНЫЕ названия сист. приложений к удалению!
Редактируйте его под себя очень осторожно!

7. Не стоит использовать сокращенные имена uwp-приложений с удаленными «суффиксами», как пишет
автор. Тоже из собственной практики — в это случае вероятность сбоя удаления намного выше! Но
дело ваше.
Узнать полное имя системного приложения можно через команду
Get-AppxPackage -PackageTypeFilter Main | ? { $_.SignatureKind -eq «System» } | Sort Name |
Format-Table Name, InstallLocation
или посмотрев в самой таблице столбец PackageFullName

8. Важно! По наблюдению, некоторые флаги IsInbox после перезагрузки возвращаются в 1, а
удаленные сист. приложения под новым пользователем оказываются на месте, причем не все.
Вообще, удаление сист. приложений с измененным на 0 флагом, действует в первую очередь для
текущего пользователя! И физически они не удаляются, а разрегистрируются; из папки C:\Windows
\SystemApps они не пропадают. Также, по наблюдению, после виндового обновления для нек. сист
приложений процедуру нужно повторить, обязательно проверив наличие staged-пакетов. Мелкософт
uwp-приложения обновляет в пакетах обновок. Команды удаления, специальные для Provisioned-
пакетов, для системных приложений не работают (определено экспериментально, в сети пишут, что
работают).

9. Вообще, все из сети нужно проверять. Напр., у командлета Remove-AppxPackage параметр —
AllUsers работает только начиная с версии 1803 — об это мало кто знает, как и то что он
требует права админа. Без него команда удаляет приложения только из текущей учетной записи. А
с ним — один хрен, в новой учетке все равно весь uwp-мусор устанавливается. Вот и пойми
мелкософт. Единственный вариант похерить весь этот мусор — использовать удаление provisioned
-пакетов вкупе с отключением автоустановки рекомендуемых приложений. Или(и) удалить системное
Microsoft.Windows.ContentDeliveryManager.

10. Вот, что нашел я по описанию нек. сист. приложений. Кому-то понадобится), рекомендации
делал чисто для себя на будущее.

Microsoft.Windows.Apprep.ChxApp_1000.17763.1.0_neutral_neutral_cw5n1h2txyewy -SmartScreen. Не
удалять. Часть дефендера и Edge»а отсутствующего. Множество настроек в Параметрах и очень
много в ГП. Достаточно отключения там и там.

Microsoft.Windows.PeopleExperienceHost_10.0.17763.1_neutral_neutral_cw5n1h2txyewy -Часть
панели «Люди». Приложение «Близкие люди» в Параметрах — Приложения. Мусор. Удален, без
последствий. По заявлению MS, из следующих билдов системы будет выпилен как и Кортана.

Microsoft.Windows.Cortana_1.11.5.17763_neutral_neutral_cw5n1h2txyewy -не отключать и не
удалять. Слишком глубокая интеграция и множество зависимых пакетов, будет падать Поиск.
Достаточно отключения в ГП. После правки в IsInbox на 0 появляется в Параметрах — Приложения,
но кнопка удаления не активна. Не трогать.

Microsoft.Windows.ContentDeliveryManager_10.0.17763.1_neutral_neutral_cw5n1h2txyewy -Служба
доставки контента; автоматически устанавливает на компьютеры «предлагаемые приложения» без
разрешения пользователей. В Параметрах — Приложения не появляется, удаление только через PS.
Мусор. Удалить.

Microsoft.ECApp_10.0.17763.1_neutral__8wekyb3d8bbwe -«Eye Control». Позволяет управлять
курсором мыша глазами, используя веб-камеру. Часть Hello (+BioEnrollment, Microsoft.LockApp,
CredDialogHost) или просто она используется этой технологией — точно не известно. Параметры —
Спец. возможности — Управление глазами. После удаления вкладка не падает, пишет «чтобы
использовать, подключите поддерживаемое устр-во». Похоже, нужна только разрабам. Удалить.

Microsoft.XboxGameCallableUI_1000.17763.1.0_neutral_neutral_cw5n1h2txyewy -The Xbox Live SDK
now contains wrapper APIs that support Title Callable UI (TCUI). TCUI display stock UI on a
Windows 10 PC/Mobile device. В LTSC отсутствуют полноценные настройки для XBOX, это непонятный
оставшийся огрызок от них для разрабов. В любом случае на LTSC не будут работать игры,
требующие наличия полноценных настроек XBOX и Магазина — по причине изначального отсутсвия
оных. В Параметрах есть куцые настройки XBOX, после удаления ничего не падает. В Параметрах —
Приложения не появляется, удаление через PS. Можно удалить.
Microsoft.MicrosoftEdgeDevToolsClient_1000.17763.1.0_neutral_neutral_8wekyb3d8bbwe -Part of
Microsoft Edge. (Remote) inspecting and debugging the Microsoft Edge browser. Edge отсутствует
в LTSC, это какой-то оставшийся огрызок. «Клиент средств разработчика» в Параметрах —
Приложения. Удалить.

Windows.CBSPreview_10.0.17763.1_neutral_neutral_cw5n1h2txyewy — софтварный декодер бар-кодов.
Дает возможность сканировать бар-коды при подключении веб-камеры. В Параметра — Приложения
появляется под именем Windows Barcode Preview. Не обязателен, можно использовать сторонние
декодеры. Удалять по желанию. Является частью имен пространства

Windows.Devices.PointOfService, предоставляя разработчику интерфейс для доступа к POS-
устройствам (BarcodeScanner, CashDrawer, LineDisplay, MagneticStripeReader и POSPrinter)
различных производителей из приложения UWP. Работает через C:\Windows\SystemApps
\Windows.CBSPreview_cw5n1h2txyewy\CameraBarcodeScannerPreview.exe.
Кстати, возможно отключение camera barcode scanner через реестр:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PointOfService\BarcodeScanner\InboxDecoder]
«Enable»=dword:0000000 (1-включить)
Удалить нахрен.

InputApp_1000.17763.1.0_neutral_neutral_cw5n1h2txyewy — Поддержка расширенных услуг
пользовательского ввода: перо и чернила, touchscreen keyboard для планшетов и тачскринов,
речь. Может пригодиться и при работе на граф. планшете. TextInput Application — появляется в
«Параметрах — Приложения». Можно удалить, но после перезагрузки самовосстанавливается. При
этом флаг в столбце IsInbox сам возвращается в 1. Не трогать.

Microsoft.Windows.OOBENetworkConnectionFlow_10.0.17763.1_neutral__cw5n1h2txyewy -Позволяет
расшаривать каналы подключения между участниками проекта. Работает криво. Требует выполнение
авторизации через UI офисных продуктов MS. Присутствует телеметрия. «Последовательность
действий при сетевом подключении» — в Параметрах-приложения. Мусор. Удалено.
P.S. Как указано по первой верхней ссылке, относится к Кортане. Удаление ни к чему плохому не
привело; сеть-инет-поиск работают.

Microsoft.Windows.OOBENetworkCaptivePortal_10.0.17763.1_neutral__cw5n1h2txyewy -Аналог Google
Captive Portal в Android для подключения к местным провайдерам Интернета. Например, в отелях,
на оф. web-странице с авторизацией по email/паролю. Присутствует телеметрия. Windows требует
незаблокированный msftconnecttest.com или msftncsi.com. «Поток портала авторизации» — в
Параметрах -Приложения. Мусор. Удалено.
P.S. Как указано по первой верхней ссылке, относится к Кортане. Удаление ни к чему плохому не
привело; сеть-инет-поиск работают.

Microsoft.Win32WebViewHost_cw5n1h2txyewy -поддержка технологии WebView для Win32-приложений
(позволяет встраивать в Win32 приложения веба). Основан на механизме рендеринга Microsoft Edge
вместо старого веб-элемента управления IE11. Анонсирован весной 2018г. Не удалять, лишней не
будет.

Microsoft.Windows.CapturePicker_cw5n1h2txyewy -на руборде пользователь «ingviowarr» пишет,
что это «A system picker UI control that allows the customer to select an item on the screen
to capture. UWP API». Для захвата экрана, его области? Возможно, не точно, насчет CBSPreview
он уже ошибся! Не удалось найти что это и для чего, офиц. документация отсутствует. Вроде как
относится к отсутствующему Edge»у. Не трогать.

Microsoft.Windows.CloudExperienceHost -что-то связанное с облаком, облачными приложениями
(напр. офис 365); мастер входа в AAD/Intune/365/workplacejoin. В принципе, не нужно, если
ничего подобного не используется и не планируется использовать. Офиц. документация
отсутствует. Лучше не трогать!

Microsoft.AsyncTextService — асинхронный текстовый сервис. Документация, описание отсутствуют,
что это такое — хз. Не трогать.

Проводник, Кортана, Безопасность Windows и Параметры не удаляются даже при исправлении
IsInbox на 0. Кнопка удаления не активна. Из них не удалить через PS только Кортану.

11. Прикола ради, в процессе тестирования удалил Параметры — новая панель управления в 10-ке.
Вполне корректно удалилась! Но, конечно, больше не открывается. С виндой ничего не
произошло))))
Также напомню, что все вышеперечисленные действия проводились на LTSC 1809. Про другие билды\редакции не берусь судить. Огромная часть информации почерпнута на руборде, спасибо тамошним ребятам за это — в особенности «ingviowarr» и «westlife»/

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

Автор проделал отличную работу. Позволю себе немного поправить его. Да не в обиде будет))

Спасибо, но моя лично работа тут, больше «журналистская» вышла — основную работу тут, проделали авторы пакета AppxDBEditor, и т.п. :)

PapaJoe писал(а):

1. Какой смысл использовать хомяковую версию 10-ки, если в корпоративных версиях, в первую
очередь LTSC:
— 80% удаляемого мусора уже отсутствует. Смысл напрягаться, если майки уже напряглись за тебя?
Меньше проделанной работы — ниже вероятность допущенной ошибки.

Однако присутствует тот мусор, которого нету в Home
А тот мусор который в Home — он, не настолько зловредный, и выпиливаем

PapaJoe писал(а):

— Пара слов про политик. Хомяковая редакция — по сути, неуправляемая, кто бы что ни говорил!
Поясню. Групповые политики в ней отсутствуют, а через них в 10-ке сосредоточено ВСЕ
управление. Настройки в Параметрах — по большей части фикция, призванная внушить усеру, что он
может чем-то «управлять» и что-то «настраивать» или содержит несуществен. настройки. Параметры
политик в реестре, за что ратует автор, — НЕ ЗАМЕНЯЮТ применение самих политик, поскольку
могут слететь после любого обновления системы и тем более глобального обновления, когда
система обновится на другой билд. Слетание настроек в реестре происходит, т.к. это
неполноценная «настройка»; когда вы правите политику через gpedit.msc, ее настройки хранятся
помимо реестра в файлах Registry.pol!

Ну и не надо нам, энто «все управление» :)
Особо замороченным — сделать скрипт, который применяет слетевшие настройки
Пакеты-то, там тоже надо проверять после обнов — вдруг майк новых каках каких, там насувал

PapaJoe писал(а):

Далее. Да я вкурсе, что можно включить GPO в HOME. Здесь появится следующая проблема. НЕ ВСЕ
настройки политик применяются в HOME. Не все настройки политик применяются даже в Про-версии.
Да, вы ее выставите «по-правильному», но бестолку. Иногда (не всегда!) это обговаривается в
описании политик — читайте внимательно. Напр., настройка телеметрии в 0 — в обычной Про и Home
не работают, хотя выставить можно. Корпоративные редакции этого недостатка лишены.

Ну и в корпоративных редакциях, не всйо тоже, можно сделать политиками ;)
Вся эта «любовь к политикам», это тоже какой-то атавизм старых винд

PapaJoe писал(а):

А если вам это несущественно, тогда зачем вообще было поднимать эту тему и лезть в такие дебри?
К слову, единожды сделанные настройки через GPO отлично бэкапятся и восстанавливаются из
бэкапа. Провернете такой фокус с реестром? Аааа…надо каждую настройку куста выгружать и
потом компоновать в один reg-файл)) для применения впоследствии.

Да не надо ничо никуда из реестра выгружать, бэкапить политики, и т.д.
В новом релизе винды, там и в политики, тоже добавят что-то
А т.к. политика майка политик этих (тавтология :)) что старые политики, должны всегда работать и в будущем — от этого, алдовые криво реализованные политики так и тянутся атавизмом далее лет 10, а само всйо «дерево политик» оказывается посему «всйо страньше и страньше», накапливаются костыли майковские какие-то там, и т.д.
Они это сделали, для корп.сектора — и там, это — оправдано

PapaJoe писал(а):

2. Используемый способ удаления нужен ТОЛЬКО ДЛЯ СИСТЕМНЫХ uwp-приложений, обычные прекрасно
удаляются через консоль PS с правами обычного админа, а если еще и удалить соотв.
provisioned-пакеты из системной учетки…отключив автоустановку рекомендуемых
приложений…красота! Кому нужно только это — не стоит заморачиваться с StateRepository-
Machine.srd.

Ну мне лично, как-то ближе, «одним махом всех убивахом» — чем ковырять «какое там системное, а какое нет»

PapaJoe писал(а):

3. Используемый способ запуска DB Browser for SQLite от имени системы…ну такое
себе…Знаете, штаны через голову тоже можно одевать. Не проще заюзать приложения попроще,
напр., RunAsSystem от apreltech.com, на сайте отсутствует — юзайте гугл. К тому же, если вы не
используете DB Browser for SQLite как редактор, запускать его от имение системы НЕ
ОБЯЗАТЕЛЬНО! Посмотреть — скопировать содержимое столбцов PackageFullName и IsInbox —
достаточно обычного запуска от админа.

Ну можно и не обязательно через psexec
Если нет прав System — тогда та папка в которой лежит тот файл БД — она недоступна, даже на чтение

PapaJoe писал(а):

4. Прогу DB Browser for SQLite юзать МОЖНО и даже НУЖНО — для тех кто хочет делать все собств.
руками, не полагаясь ни на кого. Этот способ РАБОТАЕТ — проверно собственноручно сначала на
виртуалке, затем на собственной живой системе. Все упирается в триггеры, не позволяющие
редактировать столбец IsInbox. С ними редактирование строк в IsInbox приводит к ошибке «no
such function: workid» Я работал с LTSC 1809, говорю про нее.
Чтобы поправить IsInbox с 1 на 0, нужно сделать бэкап нужных триггеров, удалить их, исправить
IsInbox в 0, вернуть триггеры. После этого большинство системных приложений появятся в
Параметрах — Приложения и будут доступны к удалению обычным (не через PS) способом.

5. Вот список триггеров в 1809 LTSC, мешающих редатрированию IsInbox:
1. CREATE TRIGGER TRG_AFTER_UPDATE_Package_SRJournal AFTER UPDATE ON Package FOR EACH ROW
BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_Revision,
_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT 1,
workid(), 1, 2, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s
CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=NEW.PackageFullName;END
2. CREATE TRIGGER TRG_AFTERDELETE_Package_Key AFTER DELETE ON Package FOR EACH ROW WHEN
is_triggers_enabled() AND OLD._WorkId=0 BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE
Id=1;INSERT OR REPLACE INTO PackageChangelog(_Revision, _WorkId, _Created, _Deleted,
PackageFullName, _PackageID, WhenOccurred, _Dictionary)SELECT 1, workid(), OLD._Created,
s.LastValue, OLD.PackageFullName, OLD._PackageID, now(), NULL FROM Sequence AS s WHERE
s.Id=1;END
3. CREATE TRIGGER TRG_AFTERINSERT_Package AFTER INSERT ON Package FOR EACH ROW BEGIN INSERT OR
IGNORE INTO PackageIdentity (PackageFamily, PackageFullName) VALUES(NEW.PackageFamily,
NEW.PackageFullName);UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO
SRJournal(_Revision, _WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred,
SequenceId)SELECT 1, workid(), 1, 1, NEW._PackageID, pi._PackageIdentityID, now(), s.LastValue
FROM Sequence AS s CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND
pi.PackageFullName=NEW.PackageFullName;END
4. CREATE TRIGGER TRG_AFTERINSERT_Package_Key AFTER INSERT ON Package FOR EACH ROW WHEN
is_triggers_enabled() AND NEW._WorkId=0 AND NEW._Created=0 BEGIN DELETE FROM PackageChangelog
WHERE NEW._Created=0 AND PackageFullName=NEW.PackageFullName;END
5. CREATE TRIGGER TRG_AFTERUPDATE_Package__Created_LongRunningTransactionUpdateDuringCommit
AFTER UPDATE OF _Created ON Package FOR EACH ROW WHEN OLD._Created=-2 AND NEW._Created>0 BEGIN
DELETE FROM PackageChangelog WHERE PackageFullName=NEW.PackageFullName;END
6. CREATE TRIGGER TRG_BEFOREDELETE_Package_SRJournal BEFORE DELETE ON Package FOR EACH ROW
BEGIN UPDATE Sequence SET LastValue=LastValue+1 WHERE Id=2 ;INSERT INTO SRJournal(_Revision,
_WorkId, ObjectType, Action, ObjectId, PackageIdentity, WhenOccurred, SequenceId)SELECT 1,
workid(), 1, 3, OLD._PackageID, pi._PackageIdentityID, now(), s.LastValue FROM Sequence AS s
CROSS JOIN PackageIdentity AS pi WHERE s.Id=2 AND pi.PackageFullName=OLD.PackageFullName;END
7. CREATE TRIGGER TRG_IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId BEFORE
INSERT ON Package FOR EACH ROW BEGIN SELECT CASE WHEN ((SELECT _PackageID FROM Package WHERE
PackageFamily=NEW.PackageFamily AND ResourceId IS NEW.ResourceId AND
Architecture=NEW.Architecture AND Version=NEW.Version AND _WorkId=NEW._WorkId) IS NOT NULL)
THEN RAISE(ABORT, ‘INSERT INTO «Package» violates the unique index
«IDX_Package_PackageFamily_ResourceId_Architecture_Version__WorkId»‘)END;END

6. Для бэкапа + исправления на 0 + восстановления триггеров удобно использовать
автоматизированный скрипт «windows_app-deployment_database_modification_script.txt» отсюда:

https://pastebin.com/uJhpXD7j

Предварительно скрипт отредактировать, указав ПОЛНЫЕ названия сист. приложений к удалению!
Редактируйте его под себя очень осторожно!

То что Вы написали — именно это, и делает скрипт AppxDBEditor — автоматом, и не надо думать даже (а также, ниже риск совершить ошибку в действиях своих, какую)
Задача юзера — подать ему «на вход», грамотный список «того что мы хотим чистить»

PapaJoe писал(а):

8. Важно! По наблюдению, некоторые флаги IsInbox после перезагрузки возвращаются в 1, а
удаленные сист. приложения под новым пользователем оказываются на месте, причем не все.
Вообще, удаление сист. приложений с измененным на 0 флагом, действует в первую очередь для
текущего пользователя!

Ну хоть какие-то, мы удалили — и то, славно уже :)

PapaJoe писал(а):

И физически они не удаляются, а разрегистрируются; из папки C:\Windows
\SystemApps они не пропадают.

Ну там еще и WinSxS папка с дистрибами их, и т.д. — чистить там, долбанешься (или, надо копать и там, всйо это, и во всйо это вникать, может скрипт какой писать шоп чистил уже там)
Это, как на андроиде — невозможно удалить вшитые приложения гугл без рутинга, однако их там легко можно ползунками отключить
Подход в рецепте первого поста — что-то вроде того

PapaJoe писал(а):

9. Вообще, все из сети нужно проверять. Напр., у командлета Remove-AppxPackage параметр —
AllUsers работает только начиная с версии 1803 — об это мало кто знает, как и то что он
требует права админа. Без него команда удаляет приложения только из текущей учетной записи. А
с ним — один хрен, в новой учетке все равно весь uwp-мусор устанавливается. Вот и пойми
мелкософт. Единственный вариант похерить весь этот мусор — использовать удаление provisioned
-пакетов вкупе с отключением автоустановки рекомендуемых приложений. Или(и) удалить системное
Microsoft.Windows.ContentDeliveryManager.

Ну сейчас, на дворе уже не 1803 а 1909 — мы тут про чистку свежачка базарим, а не про старье
И именно поэтому, т.к. в версии 1909 обнаружились новые заморочки, рецепт сабжа уже тоже видимо придется корректировать :)

PapaJoe писал(а):

Microsoft.Windows.Cortana_1.11.5.17763_neutral_neutral_cw5n1h2txyewy -не отключать и не
удалять. Слишком глубокая интеграция и множество зависимых пакетов, будет падать Поиск.
Достаточно отключения в ГП. После правки в IsInbox на 0 появляется в Параметрах — Приложения,
но кнопка удаления не активна. Не трогать.

Отключится лишь «поиск по меню пуск» (такая лупа увеличительная, там в меню пуск)
Поиск который справа вверху в проводнике — от кортаны, не зависит
Куча народу удаляла кортану, и всйо у них ок

PapaJoe писал(а):

Microsoft.Win32WebViewHost_cw5n1h2txyewy -поддержка технологии WebView для Win32-приложений
(позволяет встраивать в Win32 приложения веба). Основан на механизме рендеринга Microsoft Edge
вместо старого веб-элемента управления IE11. Анонсирован весной 2018г. Не удалять, лишней не
будет.

Вот когда собсна увижу такое приложение, в котором будет такой веб-фрейм — тогда, это приложение запросит-скачает этот компонент, и он «не будет лишним» :)

PapaJoe писал(а):

Microsoft.Windows.CapturePicker_cw5n1h2txyewy -на руборде пользователь «ingviowarr» пишет,
что это «A system picker UI control that allows the customer to select an item on the screen
to capture. UWP API». Для захвата экрана, его области? Возможно, не точно, насчет CBSPreview
он уже ошибся! Не удалось найти что это и для чего, офиц. документация отсутствует. Вроде как
относится к отсутствующему Edge»у. Не трогать.

Microsoft.Windows.CloudExperienceHost -что-то связанное с облаком, облачными приложениями
(напр. офис 365); мастер входа в AAD/Intune/365/workplacejoin. В принципе, не нужно, если
ничего подобного не используется и не планируется использовать. Офиц. документация
отсутствует. Лучше не трогать!

Многое, выпиливается экспериментальным путем :)

P.S. За корректировки описаний пакетов (какой пакет, что именно делает) — сенкс!
Да, в инете, и на реддите, там кое-где поошибались
Но в конечном итоге, всйо решается — практикой :D


_________________
silentcomputer.000webhostapp.com

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

SilentComputer писал(а):

То что Вы написали — именно это, и делает скрипт AppxDBEditor — автоматом, и не надо думать даже (а также, ниже риск совершить ошибку в действиях своих, какую)
Задача юзера — подать ему «на вход», грамотный список «того что мы хотим чистить»

Все так, но не нужно использовать обычные, не системные приложения. Наш метод — весьма узкоспецифичный, не нужно «из пушки по воробьям». Wallet, Skype, WindowsMaps, Zune и иже с ними -все можно удалить обычным способом.

SilentComputer писал(а):

Однако присутствует тот мусор, которого нету в Home
А тот мусор который в Home — он, не настолько зловредный, и выпиливаем

Верно, выпиливаемый. Но для этого выпиливания описываемое вами средство не нужно; достаточно консоли PS и прав админа. А вот системных приложений в HOME — того, на что направлен данный метод, намного больше чем в той же LTSC. Что из этого удалять, а что оставить — нужно еще поломать голову. В корпоративных изданих — этот вопрос, по большей части, решен. А подключенные политики, единственное средство настройки системы я бы мусором не назвал. Просто разберитесь с ними, это очень удобное средство настройки.

SilentComputer писал(а):

Ну и в корпоративных редакциях, не всйо тоже, можно сделать политиками
Вся эта «любовь к политикам», это тоже какой-то атавизм старых винд

Это не атавизм. По сути, это единственное полноценное средство настройки 10-ки. Почему — я объяснял.

SilentComputer писал(а):

В новом релизе винды, там и в политики, тоже добавят что-то

Добавят. Но старые настройки не слетят! В отличие от ваших настроек через реестр.

SilentComputer писал(а):

Ну мне лично, как-то ближе, «одним махом всех убивахом» — чем ковырять «какое там системное, а какое нет»

Кому как. «Наши люди в булочную на такси не ездят». На мой взгляд, используемые методы настройки должны быть адекватны. Опять же про пушку и воробъев. Ну да, стрелять можно, особенно картечью))

SilentComputer писал(а):

Если нет прав System — тогда та папка в которой лежит тот файл БД — она недоступна, даже на чтение

Вот здесь возможно. Я уже не помню, открывал ли себе доступ к этой папке или нет. Но то что база открывалась под моим усером — помню однозначно.

SilentComputer писал(а):

рецепт сабжа уже тоже видимо придется корректировать

Вероятно. Сам использую LTSC и вернусь к этой теме, когда выйдет след. ее версия. Я приверженец стабильности во всем ,а не поклонник всего нового, накатывая новые билды как только они выходят в свет. Мелкие и так всех бета-тестерами заделали и всем нравится. Да флаг в руки.)

Добавлено спустя 11 минут 53 секунды:

SilentComputer писал(а):

Вот когда собсна увижу такое приложение, в котором будет такой веб-фрейм — тогда, это приложение запросит-скачает этот компонент, и он «не будет лишним»

Не запросит и не скачает. Это путь в один конец. Просто будет ошибка при выполнении. Можно установить-зарегистрировать обычные приложения. Не системные. Так пишут, но справедливости ради, замечу, что я не пробовал восстанавливать сист. uwp-приложения. Проверьте, если хотите.

SilentComputer писал(а):

Отключится лишь «поиск по меню пуск» (такая лупа увеличительная, там в меню пуск)
Поиск который справа вверху в проводнике — от кортаны, не зависит
Куча народу удаляла кортану, и всйо у них ок

Кортана имеет колоссальное количество зависимостей от других пакетов и другие пакеты — от нее. Куча народа или просто не натыкалась на проблемы из-за этого (ввиду использования «вконтактике — киношка — игрушки») либо просто не поняла, что проблемы из-за этого. Не зря, мелкие ее не до конца удалили из LTSC. И через PS она не удаляется после правки на 0 — единственная из всех.

Добавлено спустя 2 минуты 2 секунды:

SilentComputer писал(а):

все решается практикой

Истинно так! :beer:

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

А вот системных приложений в HOME — того, на что направлен данный метод, намного больше чем в той же LTSC. Что из этого удалять, а что оставить — нужно еще поломать голову. В корпоративных изданих — этот вопрос, по большей части, решен. А подключенные политики, единственное средство настройки системы я бы мусором не назвал. Просто разберитесь с ними, это очень удобное средство настройки.

Ну знаю я, про эти политики. И сам, многократно их юзал, раньше
А реально очистить LTSC, до уровня Home? :) — шоп и gpo убрать, и т.п. корпоративные фичи?

PapaJoe писал(а):

Это не атавизм. По сути, это единственное полноценное средство настройки 10-ки. Почему — я объяснял.

Ими — просто проще, зачастую
Но стОит ли ради этого, так их любить?

PapaJoe писал(а):

Добавят. Но старые настройки не слетят! В отличие от ваших настроек через реестр.

Даже если слетят какие-то настройки в хоум — прогоняй заново скрипт (скажем, пусть он стоИт в планировщике) — и усе
Большой это, «плюс» политик?

PapaJoe писал(а):

Кому как. «Наши люди в булочную на такси не ездят». На мой взгляд, используемые методы настройки должны быть адекватны. Опять же про пушку и воробъев. Ну да, стрелять можно, особенно картечью))

Конечно, всегда хочется всйо делать, максимально грамотно
Если изначально удалить «не-системные» встроенные приложения штатными методами («компоненты винды» в «установке-удалении прог» в контрл-панеле винды), а потом еще и прогнать скрипт тот, в котором они тоже есть — думаю, хуже от такого, не будет

PapaJoe писал(а):

Вот здесь возможно. Я уже не помню, открывал ли себе доступ к этой папке или нет. Но то что база открывалась под моим усером — помню однозначно.

Не зря, авторы рецептов тех, psexec юзали
По дефолту, папка та в винде — сокрыта даже от админских прав
Поскольку майк, не захотел шоп там люди, в папке той ручками шарились — там жи, святые UWP-проги майка! :D (которые он еще со времен вин8 усердно пропихивает, но до сих пор не нужные нахрен никому, разве что м.б. кому-то на планшетах и смартах — учитывая тут полный провал мобильной винды на рынке мобильных устройств — если же скажем какая компания сейчас переведет свое детище чисто на UWP, без десктопной версии этого приложения, то обанкротится сразу нахрен — представьте скажем тот же Photoshop, работающий только в метро-режиме и не работающий в десктопе :) — да их же там, расстреляют сразу же :D)
UWP — это потуги-высеры майка, ради «единой ОС и для ПК и для мобплатформ». Пока, жалкие и неудачные. Никто пока не любит, никто не приласкает. Возможно, в Windows Core, они «взлетят». Пока же, даже сам майк, не такой дурак, чтобы заменить ими десктопные проги. Да даже если и очень захочет, реально не получится, сейчас такое.
Второй минус UWP (жирнющий) — забагованность и глючность нынешнего варианта платформы UWP майковской

PapaJoe писал(а):

Вероятно. Сам использую LTSC и вернусь к этой теме, когда выйдет след. ее версия. Я приверженец стабильности во всем ,а не поклонник всего нового, накатывая новые билды как только они выходят в свет. Мелкие и так всех бета-тестерами заделали и всем нравится. Да флаг в руки.)

А я игрот, а там желательно свежачок
А времена «ОСи которую не обновляешь год» — давно прошли, на современном игрорынке

PapaJoe писал(а):

Не запросит и не скачает. Это путь в один конец. Просто будет ошибка при выполнении. Можно установить-зарегистрировать обычные приложения. Не системные.

Вот восстановить свое барахло обратно, тут уж винду уговаривать не надо :) — тут, она на коне

PapaJoe писал(а):

Так пишут, но справедливости ради, замечу, что я не пробовал восстанавливать сист. uwp-приложения. Проверьте, если хотите.

Я Windows Store, восстанавливал
Отлично обратно он встал, потом я из него UWP-проги бесплатные качал, они тож без глюков встали, работали без глюков
На предмет сей, всегда полно рецептов в инете. Рабочих.
Не беда даже если старую версию магаза, восстановишь — винда сразу чухнется, и обновит ее на новую.

PapaJoe писал(а):

Кортана имеет колоссальное количество зависимостей от других пакетов и другие пакеты — от нее.

Было бы так всйо плохо — тогда при выполнении команды Remove-AppxPackage, страшно ругалось бы красным цветом
Но — нет

PapaJoe писал(а):

Куча народа или просто не натыкалась на проблемы из-за этого (ввиду использования «вконтактике — киношка — игрушки») либо просто не поняла, что проблемы из-за этого. Не зря, мелкие ее не до конца удалили из LTSC. И через PS она не удаляется после правки на 0 — единственная из всех.

Экспертным путем, тут всйо проверяется, лишь
Я, удалил — и у меня, всйо что мне надо, пашет нормально
А то что от кортаны выпиленной, «хвосты провисли» там — так это после любого удаленного пакета, что-то провисает :)
Конечно, всйо всегда хочется сделать, максимально грамотно
Просто винда — это не та ОСь, для этого :)
А по любой проблеме (если она возникнет, после удаления кортаны) — думаю всегда, можно найти инфу в инете — ведь много народу, ее удаляло тож
И (опять же) памятуем про страсть венды, к самовосстановлению :)


_________________
silentcomputer.000webhostapp.com

 
leworan

Member

Статус: Не в сети
Регистрация: 02.11.2011
Откуда: Казахстан
Фото: 0

Lukamor писал(а):

Кстати, westlife вместе с AutoSettingsPS распространяет скрипт по выпилке хлама в LTSC: RepackWIMPS.

где распространяет? что за скрипт?

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

SilentComputer писал(а):

Я Windows Store, восстанавливал
Отлично обратно он встал, потом я из него UWP-проги бесплатные качал, они тож без глюков встали, работали без глюков
На предмет сей, всегда полно рецептов в инете. Рабочих.
Не беда даже если старую версию магаза, восстановишь — винда сразу чухнется, и обновит ее на новую.

Все верно. Но виндовой магаз не является системным приложением. Для его удаления не нужно мухоморств с файлом базы, команды в PS хватит.
Вот, запустите под админом:
Get-AppXProvisionedPackage -online | Remove-AppxProvisionedPackage -online
Get-AppXPackage | Remove-AppxPackage
Должны удалиться все uwp-приложения вместе с магазом. Почему должны? Я видел, как команды в PS отрабатывают совершенно по-разному на разной винде и на разных компах. Где-то выполняются нормально, где-то нет. Это отдельная и большая тема — для себя я сделал вывод, что PS у индусов КРИВОЙ! Почитайте на руборде, кажется, Westlife писал про это. Он хоть и сделал настройку системы скриптом в PS, но пока изучал, сравнил это с творчеством студента-первокурсника, а CMD — творчество профессора.

SilentComputer писал(а):

А реально очистить LTSC, до уровня Home? — шоп и gpo убрать, и т.п. корпоративные фичи?

LTSC не очищается до уровня HOME. Home очищается до уровня LTSC. Фичи — это возможности системы, те же политики, а не установленные приложения. Понимаете? Очистить можно только установленные приложения, а их в home- редакциях несравнимо больше. Но, да, HELLO, напр., можно удалить из системы: там всего несколько зависимостей в пакетах (Microsoft.ECApp, BioEnrollment, Microsoft.LockApp, CredDialogHost — для желающих) — удалять нужно ВСЕ. Фичи (возможности) — они просто работают, если вы к ним обращаетесь, а не висят в памяти как приложения. Вам же не придет в голову удалять редактор системного реестра для «очистки системы». То же и про политики. В хомяке они есть, но деактивированы.

SilentComputer писал(а):

Было бы так всйо плохо — тогда при выполнении команды Remove-AppxPackage, страшно ругалось бы красным цветом

Так и есть. При попытке корректного(!) удаления через PS. Как я говорил, можно удалить даже новомодную панель управления. Но не пакет Кортаны.

SilentComputer писал(а):

Конечно, всйо всегда хочется сделать, максимально грамотно

Это значит не трогать те пакеты, которые мы не понимаем. Только в порядке эксперимента — как я с Панелью Управления. Но удаляя такое, никогда не знаешь, где это аукнется. Сейчас вы не видете проблем, а через год всплывет и человек пойдет плакаться на форумы: «Ай-яй-яй, опять криворукие индусы, я ничего не трогал…» и тд и тп. За 15 лет на этом форуме я начитался такого. Вплоть до маразмов: в одной ветке чел разгоняет проц и память, а в другой (про винду) одновременно плачется про ошибки WHPEA в журнале. У таких людей стабильность — 15 мин. линкса и тест в Аиде.

SilentComputer писал(а):

А по любой проблеме (если она возникнет, после удаления кортаны) — думаю всегда, можно найти инфу в инете — ведь много народу, ее удаляло тож

Не найдете. Проблему просто не свяжут с удалением сист. пакета «Microsoft.Windows.Cortana_1.11.5.17763_neutral_neutral_cw5n1h2txyewy», тем более когда эти 2 факта (удаление кортаны и наличие проблемы) имеют большой разрыв во времени . Челу посоветуют переставить винду и он не будет особо напрягаться.

SilentComputer писал(а):

UWP — это потуги-высеры майка, ради «единой ОС и для ПК и для мобплатформ». Пока, жалкие и неудачные

Согласен полностью.

Добавлено спустя 7 минут 26 секунд:
Да, кстати, одна из вещей, почему домашние юзеры не любят LTSC (так их научили на местном форуме по Win10) — отсутствие аппаратного декодирования 4K-видеопотока (напр., на Тюбике) силами видеокарты -прекрасным образом возвращается в LTSC :D

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

Я видел, как команды в PS отрабатывают совершенно по-разному на разной винде и на разных компах. Где-то выполняются нормально, где-то нет. Это отдельная и большая тема — для себя я сделал вывод, что PS у индусов КРИВОЙ! Почитайте на руборде, кажется, Westlife писал про это. Он хоть и сделал настройку системы скриптом в PS, но пока изучал, сравнил это с творчеством студента-первокурсника, а CMD — творчество профессора.

Да там и PS кривой, и UWP кривое, и Store кривой — а всйо вместе, это какие-то отходы генной инженерии :D — это майки торопились выстрелиться на рынок мобплатформ, но там сплошной андроид+иос их задом жирным своим задавили сразу же :)
Можно просто не юзать эти поделия, да и усе. И как показывает практика, такие приложения, разрабы не горят желанием писАть — даже после заноса чемоданов от майка. В основном, это всйо сейчас пишет, сам майк ради майка :) — прога шоп управлять джойстиком XBox какая, и пр. его подобные выперды, т.к. генсек дал наказ «продвигать концепцию единоплатформенности!»

PapaJoe писал(а):

LTSC не очищается до уровня HOME. Home очищается до уровня LTSC. Фичи — это возможности системы, те же политики, а не установленные приложения. Понимаете? Очистить можно только установленные приложения, а их в home- редакциях несравнимо больше. Но, да, HELLO, напр., можно удалить из системы: там всего несколько зависимостей в пакетах (Microsoft.ECApp, BioEnrollment, Microsoft.LockApp, CredDialogHost — для желающих) — удалять нужно ВСЕ. Фичи (возможности) — они просто работают, если вы к ним обращаетесь, а не висят в памяти как приложения. Вам же не придет в голову удалять редактор системного реестра для «очистки системы». То же и про политики. В хомяке они есть, но деактивированы.

Да понимаю я, всйо
Просто можно, и GPO, деактивировать тож? :)

PapaJoe писал(а):

Так и есть. При попытке корректного(!) удаления через PS. Как я говорил, можно удалить даже новомодную панель управления. Но не пакет Кортаны.

Кортану, там отдельный рецепт как выпиливать ее — см. под спойлером в первом посте, в коменте к кортане там — там с помощью wim, как-то
PS же, лишь «подчищает» в пакетах, если там что осталось после этого…
И о каком «корректном» удалении, мы говорим вообще? — это же, винда — а тем более, наспех на коленке слепленная кортана эта самая
В любом случае, будет — не особо корректно. Но — имо — «бояться сильно», тут не стОит

PapaJoe писал(а):

Это значит не трогать те пакеты, которые мы не понимаем. Только в порядке эксперимента — как я с Панелью Управления. Но удаляя такое, никогда не знаешь, где это аукнется. Сейчас вы не видете проблем, а через год всплывет и человек пойдет плакаться на форумы: «Ай-яй-яй, опять криворукие индусы, я ничего не трогал…» и тд и тп. За 15 лет на этом форуме я начитался такого. Вплоть до маразмов: в одной ветке чел разгоняет проц и память, а в другой (про винду) одновременно плачется про ошибки WHPEA в журнале. У таких людей стабильность — 15 мин. линкса и тест в Аиде.

Ну в целом, да — пакет который не понимаешь, трогать не стОит
Просто пакеты по которым пока нету инфы — это, новомодные «нашлепки» от майка, в системе они пока не задействованы, «бояться сильно» тут не стОит. Имо.
Там еще и «задел» под биометрию (авторизация айфонов и т.п, мешает майкам спать спокойно :)), и т.п.
Тут не «корректность» сейчас, а оторвать нашлепку шоп пыль посыпалась с места где она стояла :)

PapaJoe писал(а):

Не найдете. Проблему просто не свяжут с удалением сист. пакета «Microsoft.Windows.Cortana_1.11.5.17763_neutral_neutral_cw5n1h2txyewy», тем более когда эти 2 факта (удаление кортаны и наличие проблемы) имеют большой разрыв во времени . Челу посоветуют переставить винду и он не будет особо напрягаться.

И правильно посоветуют — поскольку, к тому времени, винду и так надо будет уже насвежо переставлять, на новый ее релиз — поскольку, винапдейт на релиз тот, не всегда обновить может сам (а даже если справится, то остатки трупов кортаны и т.п., будут лежать по углам там, до-олго еще… :))
Кортану, ее там с вытаращенными глазами прикручивали, когда стали популярны эти голосовые поиски (как и алиса, в я.браузере — сколько криков-то, «алиса!» — а реально, кто ее юзает, вообще? :D)
Плюс, в следующих релизах, как понимаю, про эту кортану уже забудут нафиг, как про страшный сон — не будет, кортаны
Посему, не вижу «греха» большого, ее хлопнуть сейчас. Пусть, не «максимально корректно». Она — язва, наспех выросшая.

Кароч, каждый решает, тут всйо — для себя сам
Как я всегда, и обозначаю — много факторов — нужна/ненужна прога, боимся/небоимся, и т.д.
Ни один рецепт в инете, не претендует на 100% его применимость ко всему всем и всия — в т.ч., и здесь
Тем более, сейчас надо уже копать, как оно всйо в 1909. Мож, и ненужен уже, рецепт сей. А мож, нужон, но другой какой. Незнаю, пока. Жизнь, покажет.

PapaJoe писал(а):

Да, кстати, одна из вещей, почему домашние юзеры не любят LTSC (так их научили на местном форуме по Win10) — отсутствие аппаратного декодирования 4K-видеопотока (напр., на Тюбике) силами видеокарты -прекрасным образом возвращается в LTSC :D

Ну вот, то тут надо «вернуть», то тут…
Верна всйо же, старая истина — Home для дома, а Pro и выше для компьютера на работе
Слон для саванны, а кит для океана
Кто-то из LTSC делает «хоум» — делаем из кита слона
А кто-то, на работе поставил хоум — делаем из слона кита
Из Феррари делали Белаз, из Белаза Феррари… :D
Ох и горазды бывают порой… на выдумку малые дети… :D
Генсек-майк, так собсна и наказал всем, еще сто лет назад — «юзай дома Home, а на работе Pro и выше»
Но люди, не верили, и пытались выростить гибрид :D
Вот вам и хваленая, «единая Windows as service» :D ну хорошо хоть, что караван весь этот, к такому идет, все-таки (правда дойдет ли? — учитывая наличие GPO :))

Добавлено спустя 35 минут 1 секунду:
Вот, кстате, код скрипта на выпилку кортаны:

Цитата:

@echo off
cd /d «%~dp0»
echo Uninstalling Cortana…
CLS
install_wim_tweak.exe /o /l
install_wim_tweak.exe /o /c Microsoft-Windows-Cortana /r
install_wim_tweak.exe /h /o /l
echo Cortana should be uninstalled. Please reboot Windows 10.
pause

Хелп проги install_wim_tweak.exe:

Цитата:

c:\1>install_wim_tweak/?
——————————————-
———Registry Tweak Tool v1.4.7.0——-
—————for Windows 6.x————-
———Created by Michal Wnuowski———
——Concept by Aviv00@msfn / lite8@MDL—-
————Modified by Legolash2o———-
——————————————-

USAGE :
install_wim_tweak [/p <Path>] [/c <PackageName> (optional)] [/?]

REMARKS :
/p<Path> Use ‘/p’ switch to provide path to mounted install.wim
/o Use ‘/o’ to run on current Windows
/c <ComponentName> Use ‘/c’ to show a specific package
/? Use ‘/?’ switch to display this info
/l Outputs all packages to «Packages.txt»
EXAMPLE :
install_wim_tweak /p C:\temp files\mount
install_wim_tweak /c Microsoft-Hyper-V-Common-Drivers-Package
Please make sure you use lowercase for the /p, /c, /o and /l

Экспертным путем: свич /h — это интерактивный ввод юзером имени пакета, после запуска команды
install_wim_tweak.exe /o /l
и
install_wim_tweak.exe /h /o /l
— это, логирование списка пакетов, в файл
Ключ /r — хз что такое, какой-то опциональный ключ

А вот, про утилиту wim_tweak (новую версию): http://wst-place.com/viewtopic.php?p=7161

Цитата:

Утилита wt.exe v1.5.0.5 для удаления в командной строке пакетов Windows 10.
Создана на базе исходного кода известной утилиты ‘install_wim_tweak’ от автора Michal Wnuowski (wnuku).

Код переработан, адаптирован для работы с DISM Windows 10, добавлена обработка ошибок и «защита от дурака» при использовании некорректного синтаксиса команд.
Убраны лишние функции и вывод на экран несущественной информации.
Добавлена проверка наличия удаляемого пакета, благодаря чему исключены попытки удаления уже отсутствующих пакетов.
Исключена из обработки ветвь реестра ‘PackagesPending’ отсутствующая в Windows 10.

В этой версии исключена работа онлайн с текущей ОС !!!
Изменён синтаксис, смотрите ключи (Keys) !!!

Текст экрана помощи:
====================================================================
Keys:
/p Path — path to mounted ‘xxx.wim’
/n PackageName — remove specific package(s)
/x AppX Name — remove specific AppX
/l — write list of all Packages to file
/m — write list of all AppX to file

Usage:
wt.exe /p Path /n PackageName
wt.exe /p Path /x AppxName

Example:
wt.exe /p E:\mnt /l
wt.exe /p E:\mnt /m
wt.exe /p E:\mnt /n Microsoft-OneCore-AllowTelemetry-
wt.exe /p E:\mnt /n Microsoft-Windows-DiagTrack-
wt.exe /p E:\mnt /x BingWeather
wt.exe /p E:\mnt /x Getstarted
wt.exe /p E:\mnt /x All (remove all AppX)

Make sure you use lowercase for the /p, /n, /x, /l, /m (ключи набираются в нижнем регистре!)
====================================================================

Вызов экрана помощи: вставить в командную строку D:\rs3\wt.exe /? или D:\rs3\wt.exe (путь к файлу wt.exe исправьте на свой).

Сохранение в файл списка пакетов
f:\rs3\wt.exe /p e:\amt /l

Сохранение в файл списка AppX
f:\rs3\wt.exe /p e:\amt /m

Пример для использования в ‘батнике’ или для копирования и вставки в командную строку:

Удаление пакетов
f:\rs3\wt.exe /p e:\amt /n WindowsSearchEngineSKU-
f:\rs3\wt.exe /p e:\amt /n Containers-ApplicationGuard-Shared-
f:\rs3\wt.exe /p e:\amt /n Windows-Defender-

Удаление ‘плиток’ AppX
f:\rs3\wt.exe /p e:\amt /x BingWeather
f:\rs3\wt.exe /p e:\amt /x GetHelp
f:\rs3\wt.exe /p e:\amt /x Getstarted

Удаление всех AppX !!!
f:\rs3\wt.exe /p e:\amt /x All

Работа проверена на Windows 10

———————————————————————
xlx 2017


_________________
silentcomputer.000webhostapp.com

Последний раз редактировалось SilentComputer 24.12.2019 17:10, всего редактировалось 3 раз(а).

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

SilentComputer писал(а):

Просто можно, и GPO, деактивировать тож?

Не знаю. Мне не приходило такое в голову :D Зачем себя лишать удобного инструмента настройки?

SilentComputer писал(а):

Кортану, там отдельный рецепт как выпиливать ее — см. под спойлером в первом посте

Че-то не нашел. Через Wim-файл ее тем более не выпилить. Я пробовал. Майки не торопятся делиться зависимостями в пакетах. Такая сложность появилась именно с 1809 билда, там даже вся драйверная модель поменялась, но в «широких сводках» такое не фигурирует. Хомякам не нужно знать таких сложностей). Вы вот, например, знали, что Microsoft-Windows-Client-Desktop-Required-Package0318 — это новое название пакета Кортаны в винде? И я не знал.

SilentComputer писал(а):

в следующих релизах, как понимаю, про эту кортану уже забудут нафиг, как про страшный сон

Мелкие уже офиц. заявили, что «овчинка выделки не стоит» и вседующих релизах ее уберут. Наконец-то что-то стало до них доходить. Лучше поздно, чем никогда.

SilentComputer писал(а):

Кто-то из LTSC делает «хоум» — делаем из кита слона

Аппаратное ускорение — единственное, что я вернул в эту систему из Про. Во всем остальном у меня она похожа не 7-ку — даже внешне. Удалено все, что не используется и не будет использоваться никогда. Что может потенциально пригодиться — просто отключено. К тому же я веду подробный лог всех вносимых изменений в Систему — чтобы знать, что откатить. Но люди -да, они такие. А давайте в LTSC вернем Edge, а давайте Магазин…

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

Не знаю. Мне не приходило такое в голову :D Зачем себя лишать удобного инструмента настройки?

Имо, надо учиться настраивать — без него
Имо

PapaJoe писал(а):

Че-то не нашел.

Я там в предыдущем посте, проапдейтил инфу

PapaJoe писал(а):

Через Wim-файл ее тем более не выпилить. Я пробовал. Майки не торопятся делиться зависимостями в пакетах. Такая сложность появилась именно с 1809 билда, там даже вся драйверная модель поменялась, но в «широких сводках» такое не фигурирует. Хомякам не нужно знать таких сложностей). Вы вот, например, знали, что Microsoft-Windows-Client-Desktop-Required-Package0318 — это новое название пакета Кортаны в винде? И я не знал.

Тем не менее, у меня после запуска wim-скрипта того — кортана, выпилилась
По крайней мере, не видно ее не слышно :) как и лупы той, в меню Пуск
Раз она сейчас «зашифровалась» уже под новым именем пакета — ну чтож, чип и дейл уже спешат на помощь :)

PapaJoe писал(а):

Мелкие уже офиц. заявили, что «овчинка выделки не стоит» и вседующих релизах ее уберут. Наконец-то что-то стало до них доходить. Лучше поздно, чем никогда.

Ну и славненько
А пока, прибьем ее :D

SilentComputer писал(а):

Аппаратное ускорение — единственное, что я вернул в эту систему из Про. Во всем остальном у меня она похожа не 7-ку — даже внешне. Удалено все, что не используется и не будет использоваться никогда. Что может потенциально пригодиться — просто отключено. К тому же я веду подробный лог всех вносимых изменений в Систему — чтобы знать, что откатить. Но люди -да, они такие. А давайте в LTSC вернем Edge, а давайте Магазин…

Ну понимаешь, просто сегодня, майки не добавили в про ускорение
А завтра (в некст релизе), еще что-то недобавят, что нужно дома (но не нужно на работе угнетенному офисному планктону :))
Может, всйо же лучше, идти по пути урезки хоума?
И да — нельзя ли в нем, включить GPO (отключенное в нем)?


_________________
silentcomputer.000webhostapp.com

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

SilentComputer писал(а):

Вот, кстате, код скрипта на выпилку кортаны

Не прокатит! Не пользуйтесь этим! Этот фокус уже не работал в «древнючей» 1809. Что уж говорить про новые билды. Скрипт слишком старый. Говорю же, майки внесли в это билд намного больше изменений, чем официально проафишировали. Для желающих такого удаления — просто переименуйте исполняемый файл Кортаны и все, вы ее «удалили». Но я так не работаю.))
Или вот руководство тех времен:
1. Убить SearchUI.exe
C:\WINDOWS\System32> taskkill /f /im SearchUI.exe
2. Переименовать папку в SystemApps. SearchUI.exe больше не будет запускаться. Но и поиск в винде работать не будет!
%windir%\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy.000
Это не удаление, а издевательство над системой!
Кстати, автор xalex — насколько мне известно, — тот, что изобрел и продвигает криворукое поделие «Win 10 Tweaker». Про сие творение можно много чего почитать на руборде. И да, я тоже пробовал его — врагу не пожелаю так «оптимизировать систему» :bandhead:

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

Но я так не работаю.))

Кстати, автор xalex — насколько мне известно, — тот, что изобрел и продвигает криворукое поделие «Win 10 Tweaker». Про сие творение можно много чего почитать на руборде. И да, я тоже пробовал его — врагу не пожелаю так «оптимизировать систему» :bandhead:

Да уж, его творение то, это еще тот «пряник»… :D
Но результат «прибить» кортану — всйо же, достигнут
А как надо прибить ее, по уму? — Ваш рецепт, тут? ;)


_________________
silentcomputer.000webhostapp.com

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

SilentComputer писал(а):

И да — нельзя ли в нем, включить GPO (отключенное в нем)?

В хомяке можно включить GPO, способ в гугле есть. Но я его не тестил по известным причинам. Для меня -незачем.

SilentComputer писал(а):

А как надо прибить ее, по уму? — Ваш рецепт, тут?

У меня нет рецепта, увы. Я ее просто не трогаю. Просто отключаю в политиках все, что можно касательно ее. Корректно прибить ее только майки смогут. Думаю, следующий релиз LTSC будет уже без нее. Да и кстати, в текущем 1809 есть мнение, что Кортана отсутствует. Но я бы не был так категоричен, посмотрев на набор интегрированных сист. приложений. С другой стороны, возможно, это относится только к Поиску. Не знаю. Офиц. информации в открытом доступе нет.

 
Prod

Member

Статус: Не в сети
Регистрация: 16.01.2005
Откуда: Великие Луки

PapaJoe
ТС опасается политик больше, чем редакцию LTSC. Но и тема же чисто для хирургии. :D
п.с. а ещё есть IOT LTSC, не путать с IOT ‘SAC’
для понимая нужны годы опыта, или года )


_________________

 
Antidot

Member

Статус: Не в сети
Регистрация: 11.07.2011

Еще в 1709 билде через реестр можно было отключить всю uwp хрень, это здорово облегчало ось, потом это убрали и то о чем вы тут пишете, так же со временем станет бесполезно. Если поставил телеметрия ОС, будь готов что каждый твой чих будет известен мелкософт

 
Lukamor

Member

Статус: Не в сети
Регистрация: 26.06.2010
Откуда: От туда.

leworan писал(а):

где распространяет? что за скрипт?

#77

Сборка Windows 10 Enterprise LTSC 2019 v1809 x64 RU by LeX 6000 (22.12.2019). Раздают на NNM-Club от LeX_6000. См. ISO в файлах папки со скриптом AutoSettingsPS, файл _ReadMe.txt. Внутри ссылка на Ян.Диск, по дереву вот эта.
Все вопросы на Ру-борд. Там тема есть соответствующая: Быстрая настройка Windows (рабочее место).

PapaJoe писал(а):

Да и кстати, в текущем 1809 есть мнение, что Кортана отсутствует.

От неё там только локальный поиск.


_________________
GA-Z97X-UD5H/Intel Core i7-4790K/Inte HD Graphics 4600/SSD PLEXTOR PX-256M5S/Crucial DDR3 32gb/Nec 26″/Creative Elite Pro/Tevii 470/W7-10 (19044)

 
SilentComputer

Заблокирован
Заблокирован

Статус: Не в сети
Регистрация: 22.02.2019
Откуда: вомкадье

PapaJoe писал(а):

В хомяке можно включить GPO, способ в гугле есть. Но я его не тестил по известным причинам. Для меня -незачем.

Потестить, бы. Реально, интересно.
Воть: Редактор групповых политик gpedit.msc в Windows 10 Home Edition
Там еще про какую-то утилиту Policy Plus сказано, надо бы потестить ее

Lukamor писал(а):

Сборка Windows 10 Enterprise LTSC 2019 v1809 x64 RU by LeX 6000 (22.12.2019). Раздают на NNM-Club от LeX_6000. См. ISO в файлах папки со скриптом AutoSettingsPS, файл _ReadMe.txt. Внутри ссылка на Ян.Диск, по дереву вот эта.
Все вопросы на Ру-борд. Там тема есть соответствующая: Быстрая настройка Windows (рабочее место).

А он там не соизволит, для хоума, то же самое запилить? :)
И ждать каждый раз когда люди там, выложат новую сборку… ну… всйо же, как-то ближе лично мне качать родной дистрибутив (с помощью Media Creation Tool), и пилить в уже установленной из него ОСи

P.S. Насколько знаю, m0nkrus дико разосрался с NNM-клубом

Lukamor писал(а):

От неё там только локальный поиск.

И снова повторю простую истину — на кортану, завязан исключительно тот поиск который по списку прог который слева в меню пуск (такая лупа, значком в том же меню пуск) — не нужный нахрен, ни ежу ни моржу
А поиск который справа вверху в проводнике (это — поиск Windows, с индексированием диска и т.д.) — не связан с кортаной, и работает отляк после ее «выпилок»
Запустите команду shell:appsfolder, откроется список всех установленных прог только в более удобном виде чем оно же в меню пуск, ищите там поиском который справа вверху в эксплорере

P.S. На прочие зависимости от кортаны, мне лично пофиг — т.к. на этот костыль деланый впопыхах под названием «кортана», завязаны думаю лишь чисто интерфейсные приблуды, вроде той же лупы в меню пуск. После недели работы на ОСи с утавоканной кортаной, не заметил никакого малфункшна нигде, кроме ушедшей из меню пуск лупы той
Кортана — компонента нулевой важности. Имо.
Каждый, поступит с ней, по вкусу личному

P.P.S. Для Home, есть такой ход конем — можно купить (рублей за 300) оем-лицуху на нее, которые продают всякие ноутбучные фирмы, за ненадобностью (которым эти оем-лицухи, по дешевке продает майк)
Посему, интересна именно Home
Где купить по дешевке лицензионные Windows 10? (самый нижний комент там, полезный)
Для LTSC, подобная халява, имеется?


_________________
silentcomputer.000webhostapp.com

 
Lukamor

Member

Статус: Не в сети
Регистрация: 26.06.2010
Откуда: От туда.

SilentComputer писал(а):

А он там не соизволит, для хоума, то же самое запилить?

Я же дал ссылку, что и где спрашивать. ;)

От себя добавлю, насколько мне известно, westlife пилит только долгоиграющие редакции LTSB/C, остальные ему мало интересны. Но в той теме на Ру-борде имеются иные скриптописатели, чьи скрипты вполне подойдут для более широких редакций: Про или Номе. Правда, выпиливать надо не из ISO, а с уже установленной системы, чем вы сами и так занимаетесь. Там в шапке многое занесено. Ознакамливайтесь.

Прежде чем появился данный скрипт, как и сама сборка, прошло не мало времени. Работа велась очень долго, инфу о результатах в сеть практически не давали. Mожете по времени отследить, когда выложили первую свою сборку LTSC и когда оф. выпуск LTSC от майков состоялся. В ход событий тогда были посвящены очень немногие, собственно и сейчас ничего не изменилось.
ps: c LTSB процесс тоже занимал у них некоторое время. За преаблулой, честно говоря, не следил. Вышел сразу на готовую сборку.

По лицензированию. За платными ключами (не от официалов) не гонялся никогда: ключ могут перепродавать нескольким лицам. Никакой защиты от слёта активации у вас нет и не будет при таком подходе. Всегда найдутся мне нужные ключи в соответствующих активационных топиках в сети и совершенно бесплатно, в том числе и под LTSC.
С допиливанием алгоритмов ЦЛ (цифровое лицензирование), майки продвинулись очень далеко. Стало возможным иметь ЦЛ даже на корпоративных редакциях. Мало того, в сети уже появились утилиты, например, Hwid Gen mkVI, W10 Digital Activation Program v1.3.7 и некоторые отдельные скрипты, с помощью которых без особого труда можно получить ЦЛ под любые редакции, кроме LTSC. Правда, есть недокументированный способ активации LTSC: KMS38 (всё в тех же утилитах). Активация продержится до 2038 года. Но данный способ не рекомендую, ключом получится куда чище: ошибки в журнал не пишутся, что не скажешь про недокументированный KMS38.


_________________
GA-Z97X-UD5H/Intel Core i7-4790K/Inte HD Graphics 4600/SSD PLEXTOR PX-256M5S/Crucial DDR3 32gb/Nec 26″/Creative Elite Pro/Tevii 470/W7-10 (19044)

 
PapaJoe

Junior

Статус: Не в сети
Регистрация: 05.12.2018

Еще. Скрипт от westlife для LTSC — вещь суперская, очень многие настройки для своей системы оттуда я позаимствовал, но пользоваться нужно осторожно. Скрипт большинство настроек делает через политики. Если не переставляете винду каждый год — внимательно изучайте вносимые изменения. Многие настройки — неочевидны и даже вредны к применению. Напр., отключение всеми «любимой» телеметрии у него подразумевает зачем-то отключение обновления корневых сертификатов. Соотв., через некоторое время у вас будут проблемы со входом на сайты. Но причину вы уже не узнаете :D

Добавлено спустя 6 минут 31 секунду:

SilentComputer писал(а):

Для LTSC, подобная халява, имеется?

На глаза попадалось на игровых трекерах. Ключи продавались от всего для продукции мелкомягких. Рублей 500 стоилио. Но только непонятно, зачем. У кого эта редакция, с ключами не заморачиваются, а активируют от локального kms чаще всего.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Лаборатория

Новости

Здравствуйте, товарищи! Прошло чуть больше полугода после выхода предыдущей статьи о Windows 10 Sophia Script — скрипте, который за прошедшие годы стал самым крупным (а их осталось всего два) опенсорс-проектом по персонализации и настройке Windows 10, а также автоматизации рутинных задач. В статье я расскажу, что изменилось с момента релиза версии, описываемой в статье от 29.09.2020, с какими трудностями мы столкнулись, и куда всё движется.


Как всё начиналось

Разработка наброска скрипта берёт своё начало в те далёкие времена, когда после года работы экономистом в отделе проектирования птицефабрики в одной организации я решил перейти в местный отдел IT.

Отдел IT

Отдел IT

Перейдя на новое место, я предложил автоматизировать настройку пользовательских ОС. Так, через пару недель, появился первый прародитель данного модуля — примитивный .reg-файл для настройки Windows 8.1. Но я и ему был рад, так как всё было в новинку.

Так продолжалось, наверное, год, пока я не понял, что упёрся в тупик и надо менять язык: начал готовить «батник».

В первый день выхода Windows 10 я сразу же «пересел» на неё, поняв, что Windows 8.1 осталась для Microsoft в прошлом. Со временем же «батник» рос, «мужал», разрастался и в какой-то момент даже стал дёргать другой интерпретатор, powershell.exe. Скорость работы падала, и я понимал, что придётся учить PowerShell, так как batch уже не удовлетворяет моим маниакальным запросам автоматизировать всё при настройке ОС.

Как сейчас помню, в феврале 2017 года я сел читать первую статью по запросу «как внести данные в реестр с помощью PowerShell». Уже к лету 2017 года я значительно продвинулся в переписывании всех имеющих функций из «батника» в новый скрипт.

Изначально, конечно, скрипт состоял лишь из одного файла с расширением .ps1. Пользователям приходилось править код и комментировать целые функции, чтобы настроить под себя. То ещё удовольствие было…

Помню, как первый раз почувствовал, что я делаю что-то полезное, когда некто создал issue с просьбой указывать, что я исправляю, когда перезаписываю файлы на GitHub. Пришлось вести журнал изменений.

В таком неспешном темпе разработка шла до августа 2019 года, когда я решил поделиться своими наработками здесь. Хотя я читаю Хабр с года эдак 2007-го, зарегистрировался лишь в 2016-м.

Немного облагородил код (ага, 10 раз), добавил описания на английском языке и накатал крохотную статью о своей pet-разработке. Удивительно, но статью пропустили, она попала в бездну, и я сел ждать.

Мой лик, когда ожидаю приглашения

Мой лик, когда ожидаю приглашения

Как сейчас помню: сижу на сеансе в кинотеатре, и приходит уведомление на почту о новом комментарии к моей статье. Так, стоп! Её одобрили?! 

Я не успевал отвечать на комментарии! Это была какая-то эйфория. Какой там фильм?! — меня на Хабр пригласили прямым инвайтом! Фурор! Даже код не обо…ли (а там был кровавый мрак) и вообще любезно приняли.

Мой лик, когда получил приглашение

Мой лик, когда получил приглашение

Самым неожиданным поворотом стало то, что через 5 дней после публикации мне написал некий Дмитрий (@oz-zo), прочитавший моё сетование на то, что у меня не хватает знаний, чтобы сделать графическую версию скрипта, даже хотя бы на Windows.Forms. Я был приятно удивлён, что есть ещё один старый безумец. Как выяснилось, старый, но не бесполезный!

Познакомившись, мы запланировали всё сделать примерно за 3 месяца на Windows.Forms, но наше приключение затянулось… больше чем на 1,5 года: лишь в этом месяце мы вышли на финишную прямую по созданию графической версии моего скрипта — SophiApp. Но это уже другая история, и, когда будет что показать, я обязательно расскажу, что мы пережили за время разработки, поделившись нашими инфернальными набросками и наработками.

С того времени как я познакомился с Дмитрием, разработка пошла быстрее: он внёс огромный вклад в создание новых функций, которых не было ни у кого: все графические функции с использованием WPF и логику к ним написал именно он; я лишь объяснил, как получать данные.

Иконка Sophia Script

Иконка Sophia Script

Немаловажным событием стало также знакомство с Дэвидом из Канады, который решил сделать самостоятельно

графическую надстройку для Sophia Script

, Sophia Script Wrapper, для повышения удобства редактирования пресет-файла. В текущем варианте пользователь импортирует пресет-файл скрипта, и в программе расставляются радиокнопки в зависимости от закомментированных и раскомментированных функций. Дальше можно настроить под себя и запустить выполнение настроенного пресет-файла.

Хотя Дэвиду уже нормально так, программировать он сел лишь недавно, окончив курсы. Но его программа выполняет ту задачу, для которой её и написали. Одним словом, люди пользуются.

Sophia Script Wrapper

Sophia Script Wrapper

Что поменялось в скрипте

За время, прошедшее с момента выхода прошлой статьи в сентябре, много воды утекло. Скрипт уже и не узнать. Больше 12 000 строк кода… Самые интересные изыскания пришлись на удаление UWP-приложений и закрепление ярлыков на начальный экран.

Напомню, какие версии Windows 10 поддерживает скрипт на данный момент.

Версия

Маркетинговое название

Билд

Архитектура

Издания

21H1

May 2021 Update

19043

x64

Home/Pro/Enterprise

20H2

October 2020 Update

19042

x64

Home/Pro/Enterprise

2004

May 2020 Update

19041

x64

Home/Pro/Enterprise

1809

LTSC Enterprise 2019

17763

x64

Enterprise

А теперь пройдёмся по всем доработанным и новым функциям.

Функции касающиеся манипуляций с UWP-приложениями

Было/Стало

Было/Стало

Наверное, вы уже заметили, что список стал локализованным. Также хочется добавить, что список генерируется динамически, загружая лишь установленные пакеты UWP-приложений в соответствии с текущей локализацией. Как это реализовано?

Свойство DisplayName, которое содержит локализованное имя пакета, находится лишь в одном классе (Get-AppxPackage вам никак тут не поможет, к сожалению):

«Windows.Management.Deployment.PackageManager»

[Windows.Management.Deployment.PackageManager, Windows.Web, ContentType = WindowsRuntime]::new().FindPackages() | Select-Object -Property DisplayName -ExpandProperty Id | Select-Object -Property Name, DisplayName

На выходе вы получите что-то вроде этого (простыню кода прячу под спойлер)

Name                                        DisplayName                                          
----                                        -----------                                          
1527c705-839a-4832-9118-54d4Bd6a0c89                                                             
c5e2524a-ea46-4f67-841f-6a9465d9d515        Проводник                                            
E2A4F912-2574-4A75-9BB0-0D023378592B        Сопоставитель приложений                             
F46D4000-FD22-4DB4-AC8E-4E1DDDE828FE        Диалоговое окно "Добавить рекомендованные папки"     
Microsoft.AAD.BrokerPlugin                  Учетная запись компании или учебного заведения       
Microsoft.AccountsControl                   Электронная почта и учетные записи                   
Microsoft.AsyncTextService                  AsyncTextService                                     
Microsoft.BioEnrollment                     Настройка Windows Hello                              
Microsoft.CredDialogHost                    Диалоговое окно учетных данных                       
Microsoft.ECApp                             Управление глазами                                   
Microsoft.LockApp                           Экран блокировки Windows по умолчанию                
Microsoft.MicrosoftEdgeDevToolsClient       Клиент средств разработчика для Microsoft Edge       
Microsoft.MicrosoftEdge                                                                          
Microsoft.Win32WebViewHost                  Веб-средство просмотра классических приложений       
Microsoft.Windows.Apprep.ChxApp             SmartScreen Защитника Windows                        
Microsoft.Windows.AssignedAccessLockApp     Приложение "Блокировка" при ограниченном доступе     
Microsoft.Windows.CallingShellApp           Видеозвонки                                          
Microsoft.Windows.CapturePicker             CapturePicker                                        
Microsoft.Windows.CloudExperienceHost       Ваша учетная запись                                  
Microsoft.Windows.ContentDeliveryManager    Содержимое, предоставленное корпорацией Майкрософт   
Microsoft.Windows.NarratorQuickStart        Экранный диктор                                      
Microsoft.Windows.OOBENetworkCaptivePortal  Поток портала авторизации                            
Microsoft.Windows.OOBENetworkConnectionFlow Последовательность действий при сетевом подключении  
Microsoft.Windows.ParentalControls          Функции семьи учетных записей Майкрософт             
Microsoft.Windows.PeopleExperienceHost      Windows Shell Experience                             
Microsoft.Windows.PinningConfirmationDialog PinningConfirmationDialog                            
Microsoft.Windows.Search                    Windows Search                                       
Microsoft.Windows.SecHealthUI               Безопасность Windows                                 
Microsoft.Windows.SecureAssessmentBrowser   Тестирование                                         
Microsoft.Windows.ShellExperienceHost       Windows Shell Experience                             
Microsoft.Windows.StartMenuExperienceHost   Запустить                                            
Microsoft.Windows.XGpuEjectDialog           Безопасное извлечение устройства                     
Microsoft.XboxGameCallableUI                Xbox Game UI                                         
MicrosoftWindows.Client.CBS                 Windows Feature Experience Pack                      
MicrosoftWindows.UndockedDevKit             UDK Package                                          
NcsiUwpApp                                  NcsiUwpApp                                           
Windows.CBSPreview                          Предварительный просмотр штрихкодов Windows          
windows.immersivecontrolpanel               Параметры                                            
Windows.PrintDialog                         PrintDialog                                          
Microsoft.Services.Store.Engagement         Microsoft Engagement Framework                       
Microsoft.Services.Store.Engagement         Microsoft Engagement Framework                       
Microsoft.UI.Xaml.2.0                       Microsoft.UI.Xaml.2.0                                
Microsoft.VCLibs.140.00                     Microsoft Visual C++ 2015 UWP Runtime Package        
Microsoft.Advertising.Xaml                  Microsoft Advertising SDK for XAML                   
Microsoft.NET.Native.Framework.2.2          Microsoft .Net Native Framework Package 2.2          
Microsoft.NET.Native.Framework.2.2          Microsoft .Net Native Framework Package 2.2          
Microsoft.VCLibs.140.00                     Microsoft Visual C++ 2015 UWP Runtime Package        
Microsoft.VCLibs.140.00                     Microsoft Visual C++ 2015 UWP Runtime Package        
Microsoft.NET.Native.Runtime.2.2            Microsoft .Net Native Runtime Package 2.2            
Microsoft.NET.Native.Runtime.2.2            Microsoft .Net Native Runtime Package 2.2            
Microsoft.VCLibs.140.00.UWPDesktop          Microsoft Visual C++ 2015 UWP Desktop Runtime Package
Microsoft.VCLibs.140.00.UWPDesktop          Microsoft Visual C++ 2015 UWP Desktop Runtime Package
Microsoft.UI.Xaml.2.1                       Microsoft.UI.Xaml.2.1                                
Microsoft.UI.Xaml.2.1                       Microsoft.UI.Xaml.2.1                                
Microsoft.UI.Xaml.2.0                       Microsoft.UI.Xaml.2.0                                
Microsoft.UI.Xaml.2.3                       Microsoft.UI.Xaml.2.3                                
Microsoft.UI.Xaml.2.3                       Microsoft.UI.Xaml.2.3                                
Microsoft.UI.Xaml.2.4                       Microsoft.UI.Xaml.2.4                                
Microsoft.UI.Xaml.2.4                       Microsoft.UI.Xaml.2.4                                
Microsoft.ScreenSketch                      Набросок на фрагменте экрана                         
Microsoft.NET.Native.Framework.1.7          Microsoft .Net Native Framework Package 1.7          
Microsoft.NET.Native.Framework.1.7          Microsoft .Net Native Framework Package 1.7          
Microsoft.NET.Native.Runtime.1.7            Microsoft .Net Native Runtime Package 1.7            
Microsoft.NET.Native.Runtime.1.7            Microsoft .Net Native Runtime Package 1.7            
Microsoft.VCLibs.120.00                     Microsoft Visual C++ Runtime Package                 
Microsoft.VCLibs.120.00                     Microsoft Visual C++ Runtime Package                 
Microsoft.VCLibs.140.00.UWPDesktop          Microsoft Visual C++ 2015 UWP Desktop Runtime Package
Microsoft.VCLibs.140.00.UWPDesktop          Microsoft Visual C++ 2015 UWP Desktop Runtime Package
Microsoft.VCLibs.140.00                     Microsoft Visual C++ 2015 UWP Runtime Package        
Microsoft.VCLibs.140.00                     Microsoft Visual C++ 2015 UWP Runtime Package        
Microsoft.WebpImageExtension                Расширения для изображений Webp                      
Microsoft.DesktopAppInstaller               Установщик приложения                                
Microsoft.NET.Native.Framework.2.2          Microsoft .Net Native Framework Package 2.2          
Microsoft.NET.Native.Framework.2.2          Microsoft .Net Native Framework Package 2.2          
AppUp.IntelGraphicsExperience               Центр управления графикой Intel                     
Microsoft.Windows.StartMenuExperienceHost   Запустить                                            
Microsoft.Windows.ShellExperienceHost       Windows Shell Experience                             
Microsoft.Windows.AssignedAccessLockApp     Приложение "Блокировка" при ограниченном доступе     
Microsoft.WindowsTerminal                   Windows Terminal                                     
Microsoft.AV1VideoExtension                 AV1 Video Extension                                  
Microsoft.HEIFImageExtension                Расширения для изображений HEIF                      
Microsoft.Windows.Photos                    Фотографии (Майкрософт)                              
Microsoft.UI.Xaml.2.5                       Microsoft.UI.Xaml.2.5                                
Microsoft.UI.Xaml.2.5                       Microsoft.UI.Xaml.2.5                                
Microsoft.WindowsStore                      Microsoft Store                                      
Microsoft.StorePurchaseApp                  Узел для покупок в Store                             
Microsoft.LanguageExperiencePackru-RU       Пакет локализованного интерфейса на русском          
Microsoft.MicrosoftEdge                     Microsoft Edge                                       
Microsoft.VP9VideoExtensions                Расширения для VP9-видео                             
MicrosoftWindows.Client.WebExperience       Windows Web Experience Pack                          
Microsoft.WebMediaExtensions                Расширения для интернет-мультимедиа                  
Microsoft.HEVCVideoExtension                Расширения для видео HEVC от производителя устройства
MicrosoftWindows.Client.CBS                 Windows Feature Experience Pack                      
Microsoft.MicrosoftEdge.Stable              Microsoft Edge     

Первые попытки переписать функцию удаления UWP-пакетов

Первые попытки переписать функцию удаления UWP-пакетов

Хоть на картинке и не видно, но кнопка «Для всех пользователей» была тоже полностью переписана. Раньше она совершенно неправильно работала. Сейчас же её логика приведена к должному функционалу. По умолчанию при загрузке формы отображается список приложений для текущего пользователя (все системные пакеты и Microsoft Store исключены из списка, так что удалить хоть что-то важное не получится никак, в отличие, кстати, от всех других скриптов в Интернете). При нажатии на кнопку «Для всех пользователей» происходит динамическая перегенерация списка с учётом установленных пакетов во всех учётных записях. То есть вы можете удалить все приложения для текущего пользователя, и форма отобразится пустой, но при запуске функции с ключом «-ForAllUsers» отобразится список пакетов для всех учётных записей.

Как-то меня попросили добавить поддержку PowerShell 7. И всё это было бы смешно, когда бы не было так грустно…

Во-первых, ни для кого не будет секретом, что, хотя в PowerShell 7 исправили очень много багов, в нынешнем виде очень далёк от финальной версии, ведь там до сих пор даже не работает командлет Get-ComputerRestorePoint из коробки. И (в качестве временного решения) Microsoft предложил загружать в сессию недостающие модули из папки PowerShell 5.1, используя аргумент -UseWindowsPowerShell.

Таким образом, мне приходится загружать модули Microsoft.PowerShell.Management, PackageManagement, Appx, чтобы воссоздать работоспособность скрипта на PowerShell 7:

Import-Module -Name Microsoft.PowerShell.Management, PackageManagement, Appx -UseWindowsPowerShell

Во-вторых, код для получения локализованных имен UWP-пакетов не работает в PowerShell 7 вообще, так как Microsoft решил не включать библиотеки WinRT в релизы PowerShell 7, но вынес разработку на отдельные ресурсы: WinRT и Windows.SDK. Это упомянул и Steven Lee в обсуждении на GitHub, а также уведомил, что команда PowerShell решила не включать в дальнейшем в релизы эти библиотеки. Поэтому, чтобы вызвать необходимые API, мне приходится хранить в папке две библиотеки по 26 МБ и 284 КБ. Тут остаётся лишь поставить мем с пингвином.

Код для получения локализованных имен UWP-пакетов на PowerShell 7 выглядит так:

Add-Type -AssemblyName "$PSScriptRoot\Libraries\WinRT.Runtime.dll"
Add-Type -AssemblyName "$PSScriptRoot\Libraries\Microsoft.Windows.SDK.NET.dll"

$AppxPackages = Get-AppxPackage -PackageTypeFilter Bundle -AllUsers
$PackagesIds = [Windows.Management.Deployment.PackageManager]::new().FindPackages().AdditionalTypeData[[Collections.IEnumerable].TypeHandle] | Select-Object -Property DisplayName -ExpandProperty Id | Select-Object -Property Name, DisplayName

foreach ($AppxPackage in $AppxPackages)
{
	$PackageId = $PackagesIds | Where-Object -FilterScript {$_.Name -eq $AppxPackage.Name}

	if (-not $PackageId)
	{
		continue
	}

	[PSCustomObject]@{
		Name = $AppxPackage.Name
		PackageFullName = $AppxPackage.PackageFullName
		DisplayName = $PackageId.DisplayName
	}
}

На выходе будет что-то вроде:

Name                                         PackageFullName                                                                DisplayName
----                                         ---------------                                                                -----------
RealtekSemiconductorCorp.RealtekAudioControl RealtekSemiconductorCorp.RealtekAudioControl_1.1.137.0_neutral_~_dt26b99r8h8gj Realtek Audio Control
Microsoft.MicrosoftStickyNotes               Microsoft.MicrosoftStickyNotes_3.7.142.0_neutral_~_8wekyb3d8bbwe               Microsoft Sticky Notes
Microsoft.ScreenSketch                       Microsoft.ScreenSketch_2020.814.2355.0_neutral_~_8wekyb3d8bbwe                 Набросок на фрагменте экрана
Microsoft.WindowsCalculator                  Microsoft.WindowsCalculator_2020.2008.2.0_neutral_~_8wekyb3d8bbwe              Windows Calculator
AppUp.IntelGraphicsExperience                AppUp.IntelGraphicsExperience_1.100.3282.0_neutral_~_8j3eq9eme6ctt             Центр управления графикой Intel
Microsoft.MicrosoftSolitaireCollection       Microsoft.MicrosoftSolitaireCollection_4.7.10142.0_neutral_~_8wekyb3d8bbwe     Microsoft Solitaire Collection
Microsoft.DesktopAppInstaller                Microsoft.DesktopAppInstaller_2020.1112.20.0_neutral_~_8wekyb3d8bbwe           Установщик приложения
Microsoft.WindowsStore                       Microsoft.WindowsStore_12101.1001.1413.0_neutral_~_8wekyb3d8bbwe               Microsoft Store
Microsoft.Windows.Photos                     Microsoft.Windows.Photos_2020.20120.4004.0_neutral_~_8wekyb3d8bbwe             Фотографии (Майкрософт)
Microsoft.WebMediaExtensions                 Microsoft.WebMediaExtensions_1.0.40471.0_neutral_~_8wekyb3d8bbwe               Расширения для интернет-мультим…
Microsoft.WindowsCamera                      Microsoft.WindowsCamera_2021.105.10.0_neutral_~_8wekyb3d8bbwe                  Камера Windows
Microsoft.StorePurchaseApp                   Microsoft.StorePurchaseApp_12103.1001.813.0_neutral_~_8wekyb3d8bbwe            Узел для покупок в Store
Microsoft.WindowsTerminal                    Microsoft.WindowsTerminal_2021.413.2245.0_neutral_~_8wekyb3d8bbwe              Windows Terminal
Microsoft.WindowsTerminalPreview             Microsoft.WindowsTerminalPreview_2021.413.2303.0_neutral_~_8wekyb3d8bbwe       Windows Terminal Preview

Аналогичный подход используется для функции восстановления UWP-приложений. Чтобы восстановить пакет, как известно, необходимо вычленить путь до его манифеста.

Восстановление удаленных UWP-приложений для текущего пользователя

Восстановление удаленных UWP-приложений для текущего пользователя

Код для получения общего списка всех манифестов выглядит так (можете даже выполнить, если, конечно, не удалили все UWP-приложения):

$Bundles = (Get-AppXPackage -PackageTypeFilter Framework -AllUsers).PackageFullName
Get-ChildItem -Path "HKLM:\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Packages" | ForEach-Object -Process {
	Get-ItemProperty -Path $_.PSPath
} | Where-Object -FilterScript {$_.Path -match "Program Files"} | Where-Object -FilterScript {$_.PSChildName -notin $Bundles} | Where-Object -FilterScript {$_.Path -match "x64"} | ForEach-Object -Process {"$($_.Path)\AppxManifest.xml"}

И вы увидите что-то вроде:

C:\Program Files\WindowsApps\A025C540.Yandex.Music_4.40.7713.0_x64__vfvw9svesycw6\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.549981C3F5F10_2.2103.17603.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.BingNews_1.0.6.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.BingWeather_1.0.6.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.11.10771.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.GamingApp_1.0.1.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.GetHelp_10.2102.40951.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.Getstarted_10.2.40751.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.HEIFImageExtension_1.0.40978.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.MicrosoftOfficeHub_18.2008.12711.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.MicrosoftSolitaireCollection_4.9.4072.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.MicrosoftStickyNotes_1.8.15.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.Paint_10.2103.1.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.People_10.1909.12456.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.PowerAutomateDesktop_1.0.31.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.ScreenSketch_11.2103.13.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.SkypeApp_14.53.77.0_x64__kzf8qxf38zg5c\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.StorePurchaseApp_12103.1001.8.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.Todos_0.41.4902.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.VP9VideoExtensions_1.0.40631.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WebMediaExtensions_1.0.40831.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WebpImageExtension_1.0.32731.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2021.21030.17018.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsAlarms_1.0.38.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.2103.8.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsCamera_2020.503.58.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\microsoft.windowscommunicationsapps_16005.13426.20688.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsFeedbackHub_1.2009.10531.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsMaps_1.0.27.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_10.2103.6.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsSoundRecorder_1.0.42.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsStore_12103.1001.11.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.6.10571.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.Xbox.TCUI_1.23.28002.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.XboxGameOverlay_1.54.4001.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.XboxGamingOverlay_5.621.4072.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.XboxIdentityProvider_12.67.21001.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.XboxSpeechToTextOverlay_1.21.13002.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.YourPhone_1.21022.202.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.ZuneMusic_10.21012.10511.0_x64__8wekyb3d8bbwe\AppxManifest.xml
C:\Program Files\WindowsApps\Microsoft.ZuneVideo_10.21021.10311.0_x64__8wekyb3d8bbwe\AppxManifest.xml

PS C:\Windows\system32\WindowsPowerShell\v1.0> 

Но нам надо сопоставить имя пакета, его локализованное имя в системе и путь до манифеста. Искать будем среди пакетов, которые имеют статус «Staged», то есть готовы к восстановлению.

# Тут нельзя напрямую вписать -PackageTypeFilter Bundle, так как иначе не выдается нужное свойство InstallLocation. Только сравнивать с $Bundles
$Bundles = (Get-AppXPackage -PackageTypeFilter Bundle -AllUsers).Name
$AppxPackages = Get-AppxPackage -AllUsers | Where-Object -FilterScript {$_.PackageUserInformation -match "Staged"} | Where-Object -FilterScript {$_.Name -in $Bundles}
$PackagesIds = [Windows.Management.Deployment.PackageManager, Windows.Web, ContentType = WindowsRuntime]::new().FindPackages() | Select-Object -Property DisplayName -ExpandProperty Id | Select-Object -Property Name, DisplayName

foreach ($AppxPackage in $AppxPackages)
{
	$PackageId = $PackagesIds | Where-Object -FilterScript {$_.Name -eq $AppxPackage.Name}

	if (-not $PackageId)
	{
		continue
	}

	[PSCustomObject]@{
		Name            = $AppxPackage.Name
		PackageFullName = $AppxPackage.PackageFullName
		DisplayName     = $PackageId.DisplayName
		AppxManifest    = "$($AppxPackage.InstallLocation)\AppxManifest.xml"
	}
}

Ну, а дальше уже дело техники. Кстати, если вам надо восстановить все возможные пакеты без разбора, то в этом вам поможет.

# Re-register all UWP apps
$Bundles = (Get-AppXPackage -PackageTypeFilter Framework -AllUsers).PackageFullName
Get-ChildItem -Path "HKLM:\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Packages" | ForEach-Object -Process {
	Get-ItemProperty -Path $_.PSPath
} | Where-Object -FilterScript {$_.Path -match "Program Files"} | Where-Object -FilterScript {$_.PSChildName -notin $Bundles} | Where-Object -FilterScript {$_.Path -match "x64"} | ForEach-Object -Process {"$($_.Path)\AppxManifest.xml"} | Add-AppxPackage -Register -ForceApplicationShutdown -ForceUpdateFromAnyVersion -DisableDevelopmentMode -Verbose
# Check for UWP apps updates
Get-CimInstance -Namespace "Root\cimv2\mdm\dmmap" -ClassName "MDM_EnterpriseModernAppManagement_AppManagement01" | Invoke-CimMethod -MethodName UpdateScanMethod

Мы специально не хотели хардкодить список приложений как на удаление, так и на восстановление, так это слишком топорно. Одним словом, получить локализованные имена приложений реально. Дмитрий создал форму на WPF и накатал логику. Не знаю, почему, но мне с Дмитрием потребовалась, наверное, пара недель, учтя все возможные и невозможные условия использования, заставить всё работать как надо.

Точно таким же способом можно выводить список локализованных имён компонентов Windows и дополнительных компонентов.

Работает экстремально медленно, но спасает то, что у меня выводится лишь захардоженный список компонентов, которые можно безболезненно отключить (и включить опять, конечно).

Get-WindowsOptionalFeature -Online | ForEach-Object -Process {Get-WindowsOptionalFeature -FeatureName $_.FeatureName -Online} | Select-Object -Property FeatureName, DisplayName | Format-Table -AutoSize

Было

Было
Стало
Стало
Наши лики, когда, наконец, всё заработало
Наши лики, когда, наконец, всё заработало

Интернационализация скрипта

На необходимость этой фичи обратил внимание @FrankSinatra в комментариях. Интернационализация позволяет избавиться от страшной конструкции вида

if ($RU)
{
	
}
else
{
	
}

Отныне в корне папки скрипта находятся папки с названием кода локализации: например, ru-RU, en-US и так далее, где внутри находится файл локализации вида UnsupportedOSBitness = The script supports Windows 10 x64 only. Получить значение локализации можно командой $PSUICulture. 

Соответственно, чтобы это всё заработало, мы импортируем указанные локализационные файлы, сохраняя строки в переменную так, чтобы можно было вызывать их в скрипте:

# Sophia.psd1
ConvertFrom-StringData -StringData @'
UnsupportedOSBitness = The script supports Windows 10 x64 only
'@

# Sophia.ps1
Import-LocalizedData -BindingVariable Global:Localization -FileName Sophia
$Localization.UnsupportedOSBitness

И в зависимости от текущей локализации системы скрипт сам будет искать нужный файл. И код чище, и людя́м приятнее! Ну, а если необходимой локализации нет, то по умолчанию загружается английская.

На сегодня скрипт локализован на 8 языков: английский, китайский, немецкий, французский, итальянский, русский, украинский, турецкий, испанский и португальский. В будущем всё-таки планирую разместить языковые файлы на Crowdin, но немного душит жаба платить столько денег за некоммерческий продукт.

Закрепление ярлыков на начальном экране

Используется при этом чистый PowerShell. Изначально я использовал стороннюю программу syspin, но возникло желание всё-таки избавиться от неё. Как вы знаете, с выходом Windows 10 October 2018 Microsoft без шума закрыл доступ к API открепления (закрепления) ярлыков от начального экрана и панели задач: отныне это можно сделать лишь вручную.

Ниже приведён пример кода для закрепления (открепления) ярлыка на начальный экран, который когда-то работал. Как можете видеть, в коде используется метод получения локализованной строки, и для этого нам необходимо знать код строки, чтобы вызвать соответствующий пункт контекстного меню. В данном примере, чтобы закрепить ярлык командной строки, мы вызываем строку с кодом 51201, «Закрепить на начальном экране», из библиотеки %SystemRoot%\system32\shell32.dll.

Получить список всех локализованных строк удобнее всего через стороннюю утилиту ResourcesExtract.

Попытка закрепить ярлык командной строки устаревшим методом:

# Extract a localized string from shell32.dll
$Signature = @{
	Namespace = "WinAPI"
	Name = "GetStr"
	Language = "CSharp"
	MemberDefinition = @"
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
public static string GetString(uint strId)
{
	IntPtr intPtr = GetModuleHandle("shell32.dll");
	StringBuilder sb = new StringBuilder(255);
	LoadString(intPtr, strId, sb, sb.Capacity);
	return sb.ToString();
}
"@
}

if (-not ("WinAPI.GetStr" -as [type]))
{
	Add-Type @Signature -Using System.Text
}

# Pin to Start: 51201
# Unpin from Start: 51394
$LocalizedString = [WinAPI.GetStr]::GetString(51201)

# Trying to pin the Command Prompt shortcut to Start
$Target = Get-Item -Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\System Tools\Command Prompt.lnk"
$Shell = New-Object -ComObject Shell.Application
$Folder = $Shell.NameSpace($Target.DirectoryName)
$file = $Folder.ParseName($Target.Name)
$Verb = $File.Verbs() | Where-Object -FilterScript {$_.Name -eq $LocalizedString}
$Verb.DoIt()

Сейчас консоль вываливается с ошибкой Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED).)

Хотя, как можно заметить, API, конечно, отдаёт глагол контекстного меню «Закрепить на начальном &экране», но не может его выполнить.

Мы знаем, что текущий макет начального экрана можно выгрузить в формате XML. Но, даже если его настроить должным образом, импортировать макет в профиль текущего пользователя не получится: Import-StartLayout -LayoutPath D:\Layout.xml импортирует макеты начального экрана и панели задач только для новых пользователей.

Идея заключается в том, чтобы использовать политику «Макет начального экрана» (Prevent users from customizing their Start Screen), отвечающую за подгрузку предзаготовленного макета в формате XML из определённого места. Таким образом, наш хак будет состоять из следующих пунктов:

  • Выгружаем текущий макет начального экрана.

  • Парсим XML, добавляя необходимые нам ярлыки (ссылки должны вести на реально существующие ярлыки), и сохраняем.

  • С помощью политики временно выключаем возможность редактировать макет начального экрана.

  • Перезапускаем меню «Пуск».

  • Программно открываем меню «Пуск», чтобы в реестре сохранился его макет.

  • Выключаем политику, чтобы можно было редактировать макет начального экрана.

  • И открываем меню «Пуск» опять.

Вуаля! В данном примере мы настроили начальный экран на лету, закрепив на него три ярлыка для текущего пользователя: панель управления, устройства и принтеры и PowerShell, причём без перезапуска или выхода из учётной записи.

Код целиком:

<#
	.SYNOPSIS
	Configure the Start tiles

	.PARAMETER ControlPanel
	Pin the "Control Panel" shortcut to Start

	.PARAMETER DevicesPrinters
	Pin the "Devices & Printers" shortcut to Start

	.PARAMETER PowerShell
	Pin the "Windows PowerShell" shortcut to Start

	.PARAMETER UnpinAll
	Unpin all the Start tiles

	.EXAMPLE
	.\Pin.ps1 -Tiles ControlPanel, DevicesPrinters, PowerShell

	.EXAMPLE
	.\Pin.ps1 -UnpinAll

	.EXAMPLE
	.\Pin.ps1 -UnpinAll -Tiles ControlPanel, DevicesPrinters, PowerShell

	.EXAMPLE
	.\Pin.ps1 -UnpinAll -Tiles ControlPanel

	.EXAMPLE
	.\Pin.ps1 -Tiles ControlPanel -UnpinAll

	.LINK
	https://github.com/farag2/Windows-10-Sophia-Script

	.NOTES
	Separate arguments with comma
	Current user
#>
[CmdletBinding()]
param
(
	[Parameter(
		Mandatory = $false,
		Position = 0
	)]
	[switch]
	$UnpinAll,

	[Parameter(
		Mandatory = $false,
		Position = 1
	)]
	[ValidateSet("ControlPanel", "DevicesPrinters", "PowerShell")]
	[string[]]
	$Tiles,

	[string]
	$StartLayout = "$PSScriptRoot\StartLayout.xml"
)

begin
{
	# Unpin all the Start tiles
	if ($UnpinAll)
	{
		Export-StartLayout -Path $StartLayout -UseDesktopApplicationID

		[xml]$XML = Get-Content -Path $StartLayout -Encoding UTF8 -Force
		$Groups = $XML.LayoutModificationTemplate.DefaultLayoutOverride.StartLayoutCollection.StartLayout.Group

		foreach ($Group in $Groups)
		{
			# Removing all groups inside XML
			$Group.ParentNode.RemoveChild($Group) | Out-Null
		}

		$XML.Save($StartLayout)
	}
}

process
{
	# Extract strings from shell32.dll using its' number
	$Signature = @{
		Namespace = "WinAPI"
		Name = "GetStr"
		Language = "CSharp"
		MemberDefinition = @"
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
public static string GetString(uint strId)
{
	IntPtr intPtr = GetModuleHandle("shell32.dll");
	StringBuilder sb = new StringBuilder(255);
	LoadString(intPtr, strId, sb, sb.Capacity);
	return sb.ToString();
}
"@
	}

	if (-not ("WinAPI.GetStr" -as [type]))
	{
		Add-Type @Signature -Using System.Text
	}

	# Extract the localized "Devices and Printers" string from shell32.dll
	$DevicesPrinters = [WinAPI.GetStr]::GetString(30493)

	# We need to get the AppID because it's auto generated
	$Script:DevicesPrintersAppID = (Get-StartApps | Where-Object -FilterScript {$_.Name -eq $DevicesPrinters}).AppID

	$Parameters = @(
		# Control Panel hash table
		@{
			# Special name for Control Panel
			Name = "ControlPanel"
			Size = "2x2"
			Column = 0
			Row = 0
			AppID = "Microsoft.Windows.ControlPanel"
		},
		# "Devices & Printers" hash table
		@{
			# Special name for "Devices & Printers"
			Name = "DevicesPrinters"
			Size   = "2x2"
			Column = 2
			Row    = 0
			AppID  = $Script:DevicesPrintersAppID
		},
		# Windows PowerShell hash table
		@{
			# Special name for Windows PowerShell
			Name = "PowerShell"
			Size = "2x2"
			Column = 4
			Row = 0
			AppID = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe"
		}
	)

	# Valid columns to place tiles in
	$ValidColumns = @(0, 2, 4)
	[string]$StartLayoutNS = "http://schemas.microsoft.com/Start/2014/StartLayout"

	# Add pre-configured hastable to XML
	function Add-Tile
	{
		param
		(
			[string]
			$Size,

			[int]
			$Column,

			[int]
			$Row,

			[string]
			$AppID
		)

		[string]$elementName = "start:DesktopApplicationTile"
		[Xml.XmlElement]$Table = $xml.CreateElement($elementName, $StartLayoutNS)
		$Table.SetAttribute("Size", $Size)
		$Table.SetAttribute("Column", $Column)
		$Table.SetAttribute("Row", $Row)
		$Table.SetAttribute("DesktopApplicationID", $AppID)

		$Table
	}

	if (-not (Test-Path -Path $StartLayout))
	{
		# Export the current Start layout
		Export-StartLayout -Path $StartLayout -UseDesktopApplicationID
	}

	[xml]$XML = Get-Content -Path $StartLayout -Encoding UTF8 -Force

	foreach ($Tile in $Tiles)
	{
		switch ($Tile)
		{
			ControlPanel
			{
				$ControlPanel = [WinAPI.GetStr]::GetString(12712)
				Write-Verbose -Message ("The `"{0}`" shortcut is being pinned to Start" -f $ControlPanel) -Verbose
			}
			DevicesPrinters
			{
				$DevicesPrinters = [WinAPI.GetStr]::GetString(30493)
				Write-Verbose -Message ("The `"{0}`" shortcut is being pinned to Start" -f $DevicesPrinters) -Verbose

				# Create the old-style "Devices and Printers" shortcut in the Start menu
				$Shell = New-Object -ComObject Wscript.Shell
				$Shortcut = $Shell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\$DevicesPrinters.lnk")
				$Shortcut.TargetPath = "control"
				$Shortcut.Arguments = "printers"
				$Shortcut.IconLocation = "$env:SystemRoot\system32\DeviceCenter.dll"
				$Shortcut.Save()

				Start-Sleep -Seconds 3
			}
			PowerShell
			{
				Write-Verbose -Message ("The `"{0}`" shortcut is being pinned to Start" -f "Windows PowerShell") -Verbose
			}
		}

		$Parameter = $Parameters | Where-Object -FilterScript {$_.Name -eq $Tile}
		$Group = $XML.LayoutModificationTemplate.DefaultLayoutOverride.StartLayoutCollection.StartLayout.Group | Where-Object -FilterScript {$_.Name -eq "Sophia Script"}

		# If the "Sophia Script" group exists in Start
		if ($Group)
		{
			$DesktopApplicationID = ($Parameters | Where-Object -FilterScript {$_.Name -eq $Tile}).AppID

			if (-not ($Group.DesktopApplicationTile | Where-Object -FilterScript {$_.DesktopApplicationID -eq $DesktopApplicationID}))
			{
				# Calculate current filled columns
				$CurrentColumns = @($Group.DesktopApplicationTile.Column)
				# Calculate current free columns and take the first one
				$Column = (Compare-Object -ReferenceObject $ValidColumns -DifferenceObject $CurrentColumns).InputObject | Select-Object -First 1
				# If filled cells contain desired ones assign the first free column
				if ($CurrentColumns -contains $Parameter.Column)
				{
					$Parameter.Column = $Column
				}
				$Group.AppendChild((Add-Tile @Parameter)) | Out-Null
			}
		}
		else
		{
			# Create the "Sophia Script" group
			[Xml.XmlElement]$Group = $XML.CreateElement("start:Group", $StartLayoutNS)
			$Group.SetAttribute("Name","Sophia Script")
			$Group.AppendChild((Add-Tile @Parameter)) | Out-Null
			$XML.LayoutModificationTemplate.DefaultLayoutOverride.StartLayoutCollection.StartLayout.AppendChild($Group) | Out-Null
		}
	}

	$XML.Save($StartLayout)
}

end
{
	# Temporarily disable changing the Start menu layout
	if (-not (Test-Path -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
	{
		New-Item -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
	}
	New-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name LockedStartLayout -Value 1 -Force
	New-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name StartLayoutFile -Value $StartLayout -Force

	Start-Sleep -Seconds 3

	# Restart the Start menu
	Stop-Process -Name StartMenuExperienceHost -Force -ErrorAction Ignore

	Start-Sleep -Seconds 3

	# Open the Start menu to load the new layout
	$wshell = New-Object -ComObject WScript.Shell
	$wshell.SendKeys("^{ESC}")

	Start-Sleep -Seconds 3

	# Enable changing the Start menu layout
	Remove-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name LockedStartLayout -Force -ErrorAction Ignore
	Remove-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name StartLayoutFile -Force -ErrorAction Ignore

	Remove-Item -Path $StartLayout -Force

	Stop-Process -Name StartMenuExperienceHost -Force -ErrorAction Ignore

	Start-Sleep -Seconds 3

	# Open the Start menu to load the new layout
	$wshell = New-Object -ComObject WScript.Shell
	$wshell.SendKeys("^{ESC}")
}

Создаваемые задания в планировщике заданий

Для начала разберём две задачи по автоматизации очистки папок %TEMP% и %SystemRoot%\SoftwareDistribution\Download. Эти папки полезно очищать по расписанию, чтобы они не разрастались. На текущий момент папка временных файлов самоочищается раз в 60 дней, а папка, куда скачиваются установочные файлы для обновлений, — раз в 90 дней.

По завершении задания были добавлены нативные всплывающие тосты, так сказать, из информационно-эстетических соображений.

Windows 10 позволяет генерировать такие тосты очень просто. Пример всплывающего тоста, как на картинке выше:

[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
[xml]$ToastTemplate = @"
<toast duration="Long">
	<visual>
		<binding template="ToastGeneric">
			<text>Уведомление</text>
			<group>
				<subgroup>
					<text hint-style="body" hint-wrap="true">Кэш обновлений Windows успешно удален</text>
				</subgroup>
			</group>
		</binding>
	</visual>
	<audio src="ms-winsoundevent:notification.default" />
</toast>
"@
$ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::New()
$ToastXml.LoadXml($ToastTemplate.OuterXml)
$ToastMessage = [Windows.UI.Notifications.ToastNotification]::New($ToastXML)
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel").Show($ToastMessage)

В вызове CreateToastNotifier можно указывать приложение, иконка которого будет отображаться в верхнем левом углу тоста и которое будет открываться при нажатии на тост. В данном случае я использовал windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel — «Настройки». Но вы вольны указать любые приложения. Узнать список всех установленных приложений и их AppID нам поможет команда Get-StartApps.

Напомню, что задача по очистке папки для временных файлов удаляет лишь файлы старше суток:

Get-ChildItem -Path $env:TEMP -Recurse -Force | Where-Object {$_.CreationTime -lt (Get-Date).AddDays(-1)} | Remove-Item -Recurse -Force

А задача по очистке папки %SystemRoot%\SoftwareDistribution\Download ждёт остановку службы wuauserv (Центр обновления Windows), чтобы в дальнейшем очистить папку

(Get-Service -Name wuauserv).WaitForStatus('Stopped', '01:00:00')

С заданием по запуску очистки диска и DISM с аргументами всё гораздо веселее. Изначально стояла задача просто запускать предзаготовленный пресет настроек для очистки диска и очистку ненужных обновлений, используя DISM: dism.exe /Online /English /Cleanup-Image /StartComponentCleanup /NoRestart.

Но пришлось решать, как заставить задание запускать очистку диска, сворачивать его окно, а потом также минимизировать окно консоли с запущенным DISM.

Сложность состоит в том, что при запуске очистки диска сначала открывается первое окошко со сканированием того, что можно очистить, потом оно закрывается, и только после этого открывается новое окошко (с новым MainWindowHandle) уже непосредственно с очисткой.

Если первое окошко достаточно легко свернуть:

$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = "$env:SystemRoot\system32\cleanmgr.exe"
$ProcessInfo.Arguments = "/sagerun:1337"
$ProcessInfo.UseShellExecute = $true
$ProcessInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Minimized

То над тем, как свернуть второе, я поломал голову, конечно. После многих попыток хоть за что-то зацепиться, я понял, что:

только MainWindowHandle окна может помочь

Get-Process -Name cleanmgr | Stop-Process -Force
Get-Process -Name Dism | Stop-Process -Force
Get-Process -Name DismHost | Stop-Process -Force

$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = "$env:SystemRoot\system32\cleanmgr.exe"
$ProcessInfo.Arguments = "/sagerun:1337"
$ProcessInfo.UseShellExecute = $true
$ProcessInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Minimized
$Process = New-Object -TypeName System.Diagnostics.Process
$Process.StartInfo = $ProcessInfo
$Process.Start() | Out-Null

Start-Sleep -Seconds 3

[int]$SourceMainWindowHandle = (Get-Process -Name cleanmgr | Where-Object -FilterScript {$_.PriorityClass -eq "BelowNormal"}).MainWindowHandle

function MinimizeWindow
{
	[CmdletBinding()]
	param
	(
		[Parameter(Mandatory = $true)]
		$Process
	)
	$ShowWindowAsync = @{
		Namespace = "WinAPI"
		Name = "Win32ShowWindowAsync"
		Language = "CSharp"
		MemberDefinition = @'
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
'@
	}

	if (-not ("WinAPI.Win32ShowWindowAsync" -as [type]))
	{
		Add-Type @ShowWindowAsync
	}

	$MainWindowHandle = (Get-Process -Name $Process | Where-Object -FilterScript {$_.PriorityClass -eq "BelowNormal"}).MainWindowHandle
	[WinAPI.Win32ShowWindowAsync]::ShowWindowAsync($MainWindowHandle, 2)
}

while ($true)
{
	[int]$CurrentMainWindowHandle = (Get-Process -Name cleanmgr | Where-Object -FilterScript {$_.PriorityClass -eq "BelowNormal"}).MainWindowHandle

	if ($SourceMainWindowHandle -ne $CurrentMainWindowHandle)
	{
		MinimizeWindow -Process cleanmgr
		break
	}

	Start-Sleep -Milliseconds 5
}

$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = "$env:SystemRoot\system32\dism.exe"
$ProcessInfo.Arguments = "/Online /English /Cleanup-Image /StartComponentCleanup /NoRestart"
$ProcessInfo.UseShellExecute = $true
$ProcessInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Minimized
$Process = New-Object -TypeName System.Diagnostics.Process
$Process.StartInfo = $ProcessInfo
$Process.Start() | Out-Null

Как видно из кода, $SourceMainWindowHandle первого окна ждёт, пока появится $CurrentMainWindowHandle второго окна, и, если, они не равны, то можно минимизировать новое окно. Дальше уже можно запускать DISM с ключами.

Но на этом я не остановился. Понял, что, возможно, пользователю будет неудобно, что за него решают, когда запускается такая задача (которая иногда может потребовать достаточное количество времени). Поэтому пришла идея сделать интерактивный всплывающий тост!

Как видно на скриншоте, пользователю предоставляются на выбор 3 варианта развития событий: отложить вопрос на 1, 30 минут или 4 часа, полностью отклонить предложение (тогда задача запустится через 30 дней) или запустить.

Как устроено это окно. Это всё тот же тост, но, чтобы создать кнопку, запускающую что-либо, кроме открытия страницы в браузере, необходимо сначала зарегистрировать новый протокол. В примере ниже показывается, как я регистрирую протокол WindowsCleanup:

if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup))
{
	New-Item -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Force
}
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name "(default)" -PropertyType String -Value "URL:WindowsCleanup" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name "URL Protocol" -Value "" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name EditFlags -PropertyType DWord -Value 2162688 -Force
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\shell\open\command))
{
	New-item -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup\shell\open\command -Force
}
# If "Run" clicked run the "Windows Cleanup" task
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup\shell\open\command -Name "(default)" -PropertyType String -Value 'powershell.exe -Command "& {Start-ScheduledTask -TaskPath ''\Sophia Script\'' -TaskName ''Windows Cleanup''}"' -Force

А потом привязываю его на кнопку запуска:

<action arguments=»WindowsCleanup:» content=»$($Localization.Run)» activationType=»protocol»/>

Всё вместе выглядит так:

# Persist the Settings notifications to prevent to immediately disappear from Action Center
if (-not (Test-Path -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel"))
{
	New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel" -Force
}
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel" -Name ShowInActionCenter -PropertyType DWord -Value 1 -Force

# Register the "WindowsCleanup" protocol to be able to run the scheduled task upon clicking on the "Run" button
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup))
{
	New-Item -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Force
}
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name "(default)" -PropertyType String -Value "URL:WindowsCleanup" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name "URL Protocol" -Value "" -Force
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup -Name EditFlags -PropertyType DWord -Value 2162688 -Force
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\shell\open\command))
{
	New-item -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup\shell\open\command -Force
}
# If "Run" clicked run the "Windows Cleanup" task
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\WindowsCleanup\shell\open\command -Name "(default)" -PropertyType String -Value 'powershell.exe -Command "& {Start-ScheduledTask -TaskPath ''\Sophia Script\'' -TaskName ''Windows Cleanup''}"' -Force

[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
[xml]$ToastTemplate = @"
<toast duration="Long" scenario="reminder">
	<visual>
		<binding template="ToastGeneric">
<text>$($Localization.CleanupTaskNotificationTitle)</text>
<group>
	<subgroup>
		<text hint-style="title" hint-wrap="true">$($Localization.CleanupTaskNotificationEventTitle)</text>
	</subgroup>
</group>
<group>
	<subgroup>
		<text hint-style="body" hint-wrap="true">$($Localization.CleanupTaskNotificationEvent)</text>
	</subgroup>
</group>
		</binding>
	</visual>
	<audio src="ms-winsoundevent:notification.default" />
	<actions>
		<input id="SnoozeTimer" type="selection" title="$($Localization.CleanupTaskNotificationSnoozeInterval)" defaultInput="1">
<selection id="1" content="$($Localization.Minute)" />
<selection id="30" content="$($Localization.Minute)" />
<selection id="240" content="$($Localization.Minute)" />
		</input>
		<action activationType="system" arguments="snooze" hint-inputId="SnoozeTimer" content="" id="test-snooze"/>
		<action arguments="WindowsCleanup:" content="$($Localization.Run)" activationType="protocol"/>
		<action arguments="dismiss" content="" activationType="system"/>
	</actions>
</toast>
"@
$ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::New()
$ToastXml.LoadXml($ToastTemplate.OuterXml)
$ToastMessage = [Windows.UI.Notifications.ToastNotification]::New($ToastXML)
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel").Show($ToastMessage)

Функция ассоциации файлов 

Как известно, начиная с Windows 8 невозможно самостоятельно ассоциировать какое-либо расширение с программой, не вычислив правильный хэш. Как выяснилось, Microsoft проводит манипуляции с захардоженной строкой «User Choice set via Windows User Experience {D18B6DD5-6124-4341-9318-804003BAFA0B}».

Пользователь Danyfirex смог реализовать правильное вычисление хэш-суммы на чистом PowerShell, но, к сожалению, после проведённых тестов выяснилось, что сам PowerShell 5.1 считает его неправильно, поэтому я вынужден был использовать код другого разработчика с алгоритмом, реализованным на чистом C#. Крайне быстро! Функция огромная, поэтому просто оставлю просто ссылку на код.

Автоматизация установки бесплатного расширения для встроенного UWP-приложения Фотографии

Еще одна забавная, но крайне полезная функция даёт возможность открывать файлы формата .heic и .heif.

Расширение крайне полезное, так как все современные телефоны умеют делать фотографии в формате HEIC, но по умолчанию Windows 10 не умеет открывать такие файлы, предлагая купить расширение в Microsoft Store по цене в 0,99 $. Но мало кто знает, что есть скрытая страница от поиска этого же самого расширения, но предназначенного для OEM-производителей. Эту же страницу можно открыть вручную, выполнив через Win+R или через PowerShell: ms-windows-store://pdp/?ProductId=9n4wgh0z6vhq

Для скачивания установочного пакета на помощь приходит всеми известный сайт https://store.rg-adguard.net. Он позволяет, зная ID страницы, получать временные прямые ссылки на установочные пакеты. Значит, можно распарсить.

$API = "https://store.rg-adguard.net/api/GetFiles"
# HEVC Video Extensions from Device Manufacturer
$ProductURL = "https://www.microsoft.com/store/productId/9n4wgh0z6vhq"

$Body = @{
	"type" = "url"
	"url"  = $ProductURL
	"ring" = "Retail"
	"lang" = "en-US"
}
$Raw = Invoke-RestMethod -Method Post -Uri $API -ContentType 'application/x-www-form-urlencoded' -Body $Body

# Parsing the page
$Raw | Select-String -Pattern '<tr style.*<a href=\"(?<url>.*)"\s.*>(?<text>.*)<\/a>' -AllMatches | ForEach-Object -Process {$_.Matches} | ForEach-Object -Process {
	$TempURL = $_.Groups[1].Value
	$Package = $_.Groups[2].Value

	if ($Package -like "Microsoft.HEVCVideoExtension_*_x64__8wekyb3d8bbwe.appx")
	{
		[PSCustomObject]@{
			PackageName = $Package
			PackageURL  = $TempURL
		}
	}
}

Дальше уже дело техники сохранить и установить скачанный пакет.

Автопродление имен функций по введённым буквам, содержащимся в названии функции или её аргумента

Это последняя значимая функция, добавленная в версию 5.10. Пользователи попросили добавить автопродление функций и их аргументов с помощью табуляции, вводя буквы, содержащиеся в названии функции или её аргументов.

Проблема в том, что до этого была лишь возможность вручную указывать функции и их аргументы а-ля .\Sophia.ps1 -Functions «DiagTrackService -Disable», «DiagnosticDataLevel -Minimal», UninstallUWPApps.

То есть ни о каком автопродлении речи и не шло: пользователю приходилось или запоминать имя функции и её аргумент, или копировать вручную данную комбинацию из пресет-файла. То ли дело сейчас!

Чтобы заработала сия шайтан-машина, пришлось прибегнуть к Register-ArgumentCompleter.

Весь код сосредоточен в отдельном файле, и не получится его поместить в текущий пресет-файл: файл необходимо вызывать с использованием dot sourcing. Одним словом, пришлось в ScriptBlock для argumentcompleter перебирать все возможные варианты конструкций вида «функция-аргумент» и просто «функция», если у последней нет собственного аргумента.

Теперь, чтобы вызвать, допустим, функцию по удалению UWP-приложений, можно ввести (после загрузки Functions.ps1) So<tab> -Fu<tab> uwp<tab>.

Крайне жутко выглядит, но стало гораздо удобнее.

Ну, а закончу рассказ на том, что даже сборка прикрепляемых архивов на странице релизов стала осуществляться с помощью конфига Github Actions. Как можно заметить, для создания архива под версию для PowerShell 7 приходится выкачивать две библиотеки с ресурсов Microsoft, так как загрузить файлы больше 25 МБ в репозиторий невозможно. Автоматизируй автоматизацию!

Итоги

Это были крайне плодотворные полгода. У нас такое ощущение, что мы прошли PowerShell на уровне «Ultra Violence». Ну, а что дальше? Параллельно я прорабатываю вариант, как реализовать, используя текущий паттерн взаимодействия пользователя со скриптом, настройку офлайновых образов WIM. Но главный приоритет для нас сейчас, конечно, — разработка SophiApp.

Цель проекта — показать, как, по нашему мнению, должен выглядеть, чувствоваться и каким функционалом обладать так называемый твикер для Windows 10. Идей — просто огромное количество! Хотя у нас нет опыта в разработке и нас всего лишь двое, а весь код на SophiApp пишет в одиночку Дмитрий, возможно, летом уже появится первый рабочий билд. Но это уже совсем другая история.

Хочу выразить огромную благодарность также пользователям forum.ru-board westlife и iNNOKENTIY21: ребят, без вашей помощи и подсказок, всё было бы по-другому! А логотип нарисовала художница tea_head, за что ей тоже спасибо. Скрины, использованные в материале, взяты из мультфильма Коргот-варвар. Группа в Telegram. Любите Windows 10, настраивайте её с умом и до новых встреч!

А если хотите прокачать себя, например получить навыки пентестера и зарабатывать на уязвимостях, или подтянуть знания алгоритмов и структур данных — приходите учиться в SkillFactory, будет сложно, но интересно! 

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

  • Профессия Data Scientist

  • Профессия Data Analyst

  • Курс по Data Engineering

Другие профессии и курсы

По мере того, как организации становятся более глобальными, и для поддержки сотрудников, работающих из любого места, рекомендуется использовать поставщика управления мобильными устройствами (MDM). Поставщики MDM помогают управлять устройствами и помогают управлять приложениями на устройствах. Для Корпорации Майкрософт это включает использование Microsoft Endpoint Manager. Endpoint Manager включает Microsoft Intune, которая является облачной службой, и Configuration Manager, которая является локальной.

В этой статье мы упоминаем эти службы. Если вы не управляете устройствами с помощью поставщика MDM, вам могут помочь следующие ресурсы:

Типы приложений

Существуют различные типы приложений, которые могут работать на Windows клиентских устройствах. В этом разделе перечислены некоторые распространенные приложения, используемые на Windows устройствах.

Microsoft 365 приложения: эти приложения используются для бизнеса и производительности и включают Outlook, Word, Teams, OneNote и другие. В зависимости от лицензий, которые есть у организации, у вас уже могут быть эти приложения. С помощью поставщика MDM эти приложения также можно развернуть на мобильных устройствах, включая смартфоны.

Дополнительные сведения о параметрах Microsoft 365 лицензии и получаемой информации см. в Microsoft 365.

Power Apps: Эти приложения подключаются к бизнес-данным, доступным в Интернете и локально, и могут работать в веб-браузере и на мобильных устройствах. Они могут быть созданы бизнес-аналитиками и профессиональными разработчиками. Дополнительные сведения см. в Power Apps?.

Windows приложения:

Универсальные Windows платформы (UWP) приложения: эти приложения работают и могут быть установлены на многих платформах Windows, включая планшеты, Microsoft HoloLens, Xbox и многое другое. Все приложения UWP являются Windows приложениями. Не все Windows являются приложениями UWP.

Дополнительные сведения см. в дополнительных сведениях: Начало разработки приложений для настольных Windows и создание отличных приложений на Windows 11.

Системные приложения: приложения, установленные в C:\Windows\ каталоге. Эти приложения являются частью Windows ОС. Список некоторых распространенных системных приложений см. в списке системных приложений, установленных с Windows клиентской ОС.

Веб-приложения и прогрессивные веб-приложения (PWA): Эти приложения работают на сервере и не запускаются на устройстве пользователя. Чтобы использовать эти приложения, пользователи должны использовать веб-браузер и иметь доступ к Интернету. Прогрессивные веб-приложения предназначены для работы для всех пользователей, работы с любым браузером и работы на любой платформе.

Веб-приложения обычно создаются в Visual Studio и могут создаваться на разных языках. Дополнительные сведения см. в странице Create a Web App. Когда приложение создано и готово для использования, развертывание веб-приложения на веб-сервере. С помощью Azure можно использовать веб-приложения в облаке, а не локально. Дополнительные сведения см. в обзоре службы приложений.

С помощью поставщика MDM можно создавать ярлыки для веб-приложений и прогрессивных веб-приложений на устройствах.

Приложения ™️ Android

Начиная с Windows 11, пользователи программы Windows Insider могут использовать Microsoft Store для поиска, скачивания и установки приложений android™️. Эта функция использует Windows подсистему для Android и позволяет пользователям взаимодействовать с приложениями Android, как и другие приложения, установленные с Microsoft Store.

Дополнительные сведения см. в следующих разделах:

Добавление или развертывание приложений на устройствах

Когда приложения будут готовы, вы можете добавить или развернуть эти приложения на Windows устройствах. В этом разделе перечислены некоторые распространенные параметры.

Ручная установка. На ваших устройствах пользователи могут устанавливать приложения из Microsoft Store, из Интернета и с общего диска организации. Эти приложения и другие приложения перечислены в Параметры > Приложения > и функции.

Если вы хотите запретить пользователям скачивать приложения на устройствах, которые принадлежат организации, используйте поставщика MDM, например Microsoft Intune. Например, вы можете создать политику, которая позволяет пользователям или предотвращает загрузку приложений, разрешается только частный магазин и другие. Дополнительные сведения о возможности, которые можно ограничить, см. в Windows параметров клиентских устройств, позволяющих или ограничивающих функции с помощью Intune.

Общие сведения о различных типах политик устройств, которые можно создать, см. в примере Apply features and settings on your devices using device profiles in Microsoft Intune.

Управление мобильными устройствами (MDM): для развертывания приложений используйте поставщика MDM, например Microsoft Intune (облако) или Configuration Manager (локально). Например, можно создавать политики приложений, Microsoft 365 приложения, развертывать приложения Win32, создавать ярлыки для веб-приложений, добавлять приложения Store и другие.

Дополнительные сведения см. в следующих разделах:

Microsoft Store. С Microsoft Store приложением Windows пользователи могут загружать приложения из общего магазина. Кроме того, они могут загружать приложения, предоставляемые вашей организацией, которая называется «частный магазин». Если ваша организация создает собственные приложения, вы можете использовать Диспетчер пакетов Windows для добавления приложений в частный магазин.

Чтобы помочь управлять Microsoft Store устройствами, можно использовать политики:

Дополнительные сведения см. в следующих разделах:

Чтобы развернуть пакеты MSIX и их приложения, можно:

Дополнительные сведения см. в следующих разделах:

Диспетчер пакетов Windows: Диспетчер пакетов Windows — это средство командной строки, обычно используемая разработчиками для установки Windows приложений. С помощью командной строки можно получить приложения из Microsoft Store или GitHub (и более) и установить эти приложения на Windows устройствах. Это полезно, если вы хотите обойти пользовательские интерфейсы для получения приложений от организаций и от разработчиков.

Виртуальный рабочий стол Azure с присоединением к приложению MSIX. С помощью виртуального рабочего стола Azure можно виртуализировать Windows клиентской ОС и использовать виртуальные приложения на этом рабочем столе. С помощью приложения MSIX вы динамически доставляете пакетные приложения MSIX пользователям и группам пользователей.

Преимуществом является использование облака для доставки виртуальных приложений в режиме реального времени и по мере необходимости. Пользователи используют приложения так, как будто они установлены локально.

Если вы в настоящее время используете App-V и хотите уменьшить локальное присутствие, то для вашей организации может быть правильное развертывание рабочего стола Azure Virtual с присоединением к приложению MSIX.

Дополнительные сведения см. в следующих разделах:

Виртуализация приложений (App-V). Приложение-V позволяет использовать приложения Win32 в качестве виртуальных приложений.

Виртуализация приложений завершится в апреле 2026 г. Рекомендуем посмотреть на Azure Virtual Desktop с присоединением к приложению MSIX. Дополнительные сведения см. в дополнительных сведениях о том, что такое Виртуальный рабочий стол Azure? и настройка приложения MSIX с порталом Azure.

На локальном сервере устанавливаются и настраиваются компоненты сервера App-V, а затем устанавливаются приложения Win32. На Windows Enterprise клиентских устройствах для запуска виртуализированных приложений используются клиентские компоненты App-V. Они позволяют пользователям открывать виртуальные приложения с помощью знакомых им значков и имен файлов. Пользователи используют приложения так, как будто они установлены локально.

Преимуществом является доставка виртуальных приложений в режиме реального времени и по мере необходимости. Дополнительные сведения см. в обзоре виртуализации приложений (App-V) Windows.

Чтобы управлять App-V на устройствах, можно использовать политики:

Настройки Windows 10: часть III, или куда приводят скрипты

Здравствуйте, товарищи! Прошло чуть больше полугода после выхода предыдущей статьи о Windows 10 Sophia Script — скрипте, который за прошедшие годы стал самым крупным (а их осталось всего два) опенсорс-проектом по персонализации и настройке Windows 10, а также автоматизации рутинных задач. В статье я расскажу, что изменилось с момента релиза версии, описываемой в статье от 29.09.2020, с какими трудностями мы столкнулись, и куда всё движется.

Как всё начиналось

Разработка наброска скрипта берёт своё начало в те далёкие времена, когда после года работы экономистом в отделе проектирования птицефабрики в одной организации я решил перейти в местный отдел IT.

Отдел IT

Так продолжалось, наверное, год, пока я не понял, что упёрся в тупик и надо менять язык: начал готовить «батник».

В первый день выхода Windows 10 я сразу же «пересел» на неё, поняв, что Windows 8.1 осталась для Microsoft в прошлом. Со временем же «батник» рос, «мужал», разрастался и в какой-то момент даже стал дёргать другой интерпретатор, powershell.exe. Скорость работы падала, и я понимал, что придётся учить PowerShell, так как batch уже не удовлетворяет моим маниакальным запросам автоматизировать всё при настройке ОС.

Как сейчас помню, в феврале 2017 года я сел читать первую статью по запросу «как внести данные в реестр с помощью PowerShell». Уже к лету 2017 года я значительно продвинулся в переписывании всех имеющих функций из «батника» в новый скрипт.

Помню, как первый раз почувствовал, что я делаю что-то полезное, когда некто создал issue с просьбой указывать, что я исправляю, когда перезаписываю файлы на GitHub. Пришлось вести журнал изменений.

В таком неспешном темпе разработка шла до августа 2019 года, когда я решил поделиться своими наработками здесь. Хотя я читаю Хабр с года эдак 2007-го, зарегистрировался лишь в 2016-м.

Немного облагородил код (ага, 10 раз), добавил описания на английском языке и накатал крохотную статью о своей pet-разработке. Удивительно, но статью пропустили, она попала в бездну, и я сел ждать.

Мой лик, когда ожидаю приглашения

Как сейчас помню: сижу на сеансе в кинотеатре, и приходит уведомление на почту о новом комментарии к моей статье. Так, стоп! Её одобрили?!

Я не успевал отвечать на комментарии! Это была какая-то эйфория. Какой там фильм?! — меня на Хабр пригласили прямым инвайтом! Фурор! Даже код не обо. ли (а там был кровавый мрак) и вообще любезно приняли.

Мой лик, когда получил приглашение

Самым неожиданным поворотом стало то, что через 5 дней после публикации мне написал некий Дмитрий (@oz-zo), прочитавший моё сетование на то, что у меня не хватает знаний, чтобы сделать графическую версию скрипта, даже хотя бы на Windows.Forms. Я был приятно удивлён, что есть ещё один старый безумец. Как выяснилось, старый, но не бесполезный!

Познакомившись, мы запланировали всё сделать примерно за 3 месяца на Windows.Forms, но наше приключение затянулось… больше чем на 1,5 года: лишь в этом месяце мы вышли на финишную прямую по созданию графической версии моего скрипта — SophiApp. Но это уже другая история, и, когда будет что показать, я обязательно расскажу, что мы пережили за время разработки, поделившись нашими инфернальными набросками и наработками.

С того времени как я познакомился с Дмитрием, разработка пошла быстрее: он внёс огромный вклад в создание новых функций, которых не было ни у кого: все графические функции с использованием WPF и логику к ним написал именно он; я лишь объяснил, как получать данные.

Немаловажным событием стало также знакомство с Дэвидом из Канады, который решил сделать самостоятельно графическую надстройку для Sophia Script, Sophia Script Wrapper, для повышения удобства редактирования пресет-файла. В текущем варианте пользователь импортирует пресет-файл скрипта, и в программе расставляются радиокнопки в зависимости от закомментированных и раскомментированных функций. Дальше можно настроить под себя и запустить выполнение настроенного пресет-файла.

Хотя Дэвиду уже нормально так, программировать он сел лишь недавно, окончив курсы. Но его программа выполняет ту задачу, для которой её и написали. Одним словом, люди пользуются.

Sophia Script Wrapper

Что поменялось в скрипте

За время, прошедшее с момента выхода прошлой статьи в сентябре, много воды утекло. Скрипт уже и не узнать. Больше 12 000 строк кода… Самые интересные изыскания пришлись на удаление UWP-приложений и закрепление ярлыков на начальный экран.

Напомню, какие версии Windows 10 поддерживает скрипт на данный момент.

Версия

Маркетинговое название

Билд

Архитектура

Издания

October 2020 Update

LTSC Enterprise 2019

А теперь пройдёмся по всем доработанным и новым функциям.

Функции касающиеся манипуляций с UWP-приложениями

Наверное, вы уже заметили, что список стал локализованным. Также хочется добавить, что список генерируется динамически, загружая лишь установленные пакеты UWP-приложений в соответствии с текущей локализацией. Как это реализовано?

Свойство DisplayName, которое содержит локализованное имя пакета, находится лишь в одном классе (Get-AppxPackage вам никак тут не поможет, к сожалению):

На выходе вы получите что-то вроде этого (простыню кода прячу под спойлер)

Хоть на картинке и не видно, но кнопка «Для всех пользователей» была тоже полностью переписана. Раньше она совершенно неправильно работала. Сейчас же её логика приведена к должному функционалу. По умолчанию при загрузке формы отображается список приложений для текущего пользователя (все системные пакеты и Microsoft Store исключены из списка, так что удалить хоть что-то важное не получится никак, в отличие, кстати, от всех других скриптов в Интернете). При нажатии на кнопку «Для всех пользователей» происходит динамическая перегенерация списка с учётом установленных пакетов во всех учётных записях. То есть вы можете удалить все приложения для текущего пользователя, и форма отобразится пустой, но при запуске функции с ключом «-ForAllUsers» отобразится список пакетов для всех учётных записей.

Как-то меня попросили добавить поддержку PowerShell 7. И всё это было бы смешно, когда бы не было так грустно…

Во-первых, ни для кого не будет секретом, что, хотя в PowerShell 7 исправили очень много багов, в нынешнем виде очень далёк от финальной версии, ведь там до сих пор даже не работает командлет Get-ComputerRestorePoint из коробки. И (в качестве временного решения) Microsoft предложил загружать в сессию недостающие модули из папки PowerShell 5.1, используя аргумент -UseWindowsPowerShell.

Таким образом, мне приходится загружать модули Microsoft.PowerShell.Management, PackageManagement, Appx, чтобы воссоздать работоспособность скрипта на PowerShell 7:

Во-вторых, код для получения локализованных имен UWP-пакетов не работает в PowerShell 7 вообще, так как Microsoft решил не включать библиотеки WinRT в релизы PowerShell 7, но вынес разработку на отдельные ресурсы: WinRT и Windows.SDK. Это упомянул и Steven Lee в обсуждении на GitHub, а также уведомил, что команда PowerShell решила не включать в дальнейшем в релизы эти библиотеки. Поэтому, чтобы вызвать необходимые API, мне приходится хранить в папке две библиотеки по 26 МБ и 284 КБ. Тут остаётся лишь поставить мем с пингвином.

Код для получения локализованных имен UWP-пакетов на PowerShell 7 выглядит так:

На выходе будет что-то вроде:

Аналогичный подход используется для функции восстановления UWP-приложений. Чтобы восстановить пакет, как известно, необходимо вычленить путь до его манифеста.

Восстановление удаленных UWP-приложений для текущего пользователя

Код для получения общего списка всех манифестов выглядит так (можете даже выполнить, если, конечно, не удалили все UWP-приложения):

И вы увидите что-то вроде:

Но нам надо сопоставить имя пакета, его локализованное имя в системе и путь до манифеста. Искать будем среди пакетов, которые имеют статус «Staged», то есть готовы к восстановлению.

Ну, а дальше уже дело техники. Кстати, если вам надо восстановить все возможные пакеты без разбора, то в этом вам поможет.

Мы специально не хотели хардкодить список приложений как на удаление, так и на восстановление, так это слишком топорно. Одним словом, получить локализованные имена приложений реально. Дмитрий создал форму на WPF и накатал логику. Не знаю, почему, но мне с Дмитрием потребовалась, наверное, пара недель, учтя все возможные и невозможные условия использования, заставить всё работать как надо.

Точно таким же способом можно выводить список локализованных имён компонентов Windows и дополнительных компонентов.

Работает экстремально медленно, но спасает то, что у меня выводится лишь захардоженный список компонентов, которые можно безболезненно отключить (и включить опять, конечно).

Было Стало Наши лики, когда, наконец, всё заработало

Интернационализация скрипта

На необходимость этой фичи обратил внимание @FrankSinatra в комментариях. Интернационализация позволяет избавиться от страшной конструкции вида

Соответственно, чтобы это всё заработало, мы импортируем указанные локализационные файлы, сохраняя строки в переменную так, чтобы можно было вызывать их в скрипте:

И в зависимости от текущей локализации системы скрипт сам будет искать нужный файл. И код чище, и людя́м приятнее! Ну, а если необходимой локализации нет, то по умолчанию загружается английская.

На сегодня скрипт локализован на 8 языков: английский, китайский, немецкий, французский, итальянский, русский, украинский, турецкий, испанский и португальский. В будущем всё-таки планирую разместить языковые файлы на Crowdin, но немного душит жаба платить столько денег за некоммерческий продукт.

Закрепление ярлыков на начальном экране

Используется при этом чистый PowerShell. Изначально я использовал стороннюю программу syspin, но возникло желание всё-таки избавиться от неё. Как вы знаете, с выходом Windows 10 October 2018 Microsoft без шума закрыл доступ к API открепления (закрепления) ярлыков от начального экрана и панели задач: отныне это можно сделать лишь вручную.

Ниже приведён пример кода для закрепления (открепления) ярлыка на начальный экран, который когда-то работал. Как можете видеть, в коде используется метод получения локализованной строки, и для этого нам необходимо знать код строки, чтобы вызвать соответствующий пункт контекстного меню. В данном примере, чтобы закрепить ярлык командной строки, мы вызываем строку с кодом 51201, «Закрепить на начальном экране», из библиотеки %SystemRoot%\system32\shell32.dll.

Получить список всех локализованных строк удобнее всего через стороннюю утилиту ResourcesExtract.

Попытка закрепить ярлык командной строки устаревшим методом:

Сейчас консоль вываливается с ошибкой Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED).)

Хотя, как можно заметить, API, конечно, отдаёт глагол контекстного меню «Закрепить на начальном &экране», но не может его выполнить.

Идея заключается в том, чтобы использовать политику «Макет начального экрана» (Prevent users from customizing their Start Screen), отвечающую за подгрузку предзаготовленного макета в формате XML из определённого места. Таким образом, наш хак будет состоять из следующих пунктов:

Выгружаем текущий макет начального экрана.

Парсим XML, добавляя необходимые нам ярлыки (ссылки должны вести на реально существующие ярлыки), и сохраняем.

С помощью политики временно выключаем возможность редактировать макет начального экрана.

Перезапускаем меню «Пуск».

Программно открываем меню «Пуск», чтобы в реестре сохранился его макет.

Выключаем политику, чтобы можно было редактировать макет начального экрана.

И открываем меню «Пуск» опять.

Вуаля! В данном примере мы настроили начальный экран на лету, закрепив на него три ярлыка для текущего пользователя: панель управления, устройства и принтеры и PowerShell, причём без перезапуска или выхода из учётной записи.

Создаваемые задания в планировщике заданий

Для начала разберём две задачи по автоматизации очистки папок %TEMP% и %SystemRoot%\SoftwareDistribution\Download. Эти папки полезно очищать по расписанию, чтобы они не разрастались. На текущий момент папка временных файлов самоочищается раз в 60 дней, а папка, куда скачиваются установочные файлы для обновлений, — раз в 90 дней.

По завершении задания были добавлены нативные всплывающие тосты, так сказать, из информационно-эстетических соображений.

Windows 10 позволяет генерировать такие тосты очень просто. Пример всплывающего тоста, как на картинке выше:

В вызове CreateToastNotifier можно указывать приложение, иконка которого будет отображаться в верхнем левом углу тоста и которое будет открываться при нажатии на тост. В данном случае я использовал windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel — «Настройки». Но вы вольны указать любые приложения. Узнать список всех установленных приложений и их AppID нам поможет команда Get-StartApps.

Напомню, что задача по очистке папки для временных файлов удаляет лишь файлы старше суток:

А задача по очистке папки %SystemRoot%\SoftwareDistribution\Download ждёт остановку службы wuauserv (Центр обновления Windows), чтобы в дальнейшем очистить папку

С заданием по запуску очистки диска и DISM с аргументами всё гораздо веселее. Изначально стояла задача просто запускать предзаготовленный пресет настроек для очистки диска и очистку ненужных обновлений, используя DISM: dism.exe /Online /English /Cleanup-Image /StartComponentCleanup /NoRestart.

Но пришлось решать, как заставить задание запускать очистку диска, сворачивать его окно, а потом также минимизировать окно консоли с запущенным DISM.

Сложность состоит в том, что при запуске очистки диска сначала открывается первое окошко со сканированием того, что можно очистить, потом оно закрывается, и только после этого открывается новое окошко (с новым MainWindowHandle) уже непосредственно с очисткой.

Если первое окошко достаточно легко свернуть:

То над тем, как свернуть второе, я поломал голову, конечно. После многих попыток хоть за что-то зацепиться, я понял, что:

только MainWindowHandle окна может помочь

Но на этом я не остановился. Понял, что, возможно, пользователю будет неудобно, что за него решают, когда запускается такая задача (которая иногда может потребовать достаточное количество времени). Поэтому пришла идея сделать интерактивный всплывающий тост!

Как видно на скриншоте, пользователю предоставляются на выбор 3 варианта развития событий: отложить вопрос на 1, 30 минут или 4 часа, полностью отклонить предложение (тогда задача запустится через 30 дней) или запустить.

Как устроено это окно. Это всё тот же тост, но, чтобы создать кнопку, запускающую что-либо, кроме открытия страницы в браузере, необходимо сначала зарегистрировать новый протокол. В примере ниже показывается, как я регистрирую протокол WindowsCleanup:

А потом привязываю его на кнопку запуска:

Всё вместе выглядит так:

Функция ассоциации файлов

Как известно, начиная с Windows 8 невозможно самостоятельно ассоциировать какое-либо расширение с программой, не вычислив правильный хэш. Как выяснилось, Microsoft проводит манипуляции с захардоженной строкой «User Choice set via Windows User Experience «.

Пользователь Danyfirex смог реализовать правильное вычисление хэш-суммы на чистом PowerShell, но, к сожалению, после проведённых тестов выяснилось, что сам PowerShell 5.1 считает его неправильно, поэтому я вынужден был использовать код другого разработчика с алгоритмом, реализованным на чистом C#. Крайне быстро! Функция огромная, поэтому просто оставлю просто ссылку на код.

Автоматизация установки бесплатного расширения для встроенного UWP-приложения Фотографии

Для скачивания установочного пакета на помощь приходит всеми известный сайт https://store.rg-adguard.net. Он позволяет, зная ID страницы, получать временные прямые ссылки на установочные пакеты. Значит, можно распарсить.

Дальше уже дело техники сохранить и установить скачанный пакет.

Автопродление имен функций по введённым буквам, содержащимся в названии функции или её аргумента

Это последняя значимая функция, добавленная в версию 5.10. Пользователи попросили добавить автопродление функций и их аргументов с помощью табуляции, вводя буквы, содержащиеся в названии функции или её аргументов.

То есть ни о каком автопродлении речи и не шло: пользователю приходилось или запоминать имя функции и её аргумент, или копировать вручную данную комбинацию из пресет-файла. То ли дело сейчас!

Чтобы заработала сия шайтан-машина, пришлось прибегнуть к Register-ArgumentCompleter.

Весь код сосредоточен в отдельном файле, и не получится его поместить в текущий пресет-файл: файл необходимо вызывать с использованием dot sourcing. Одним словом, пришлось в ScriptBlock для argumentcompleter перебирать все возможные варианты конструкций вида «функция-аргумент» и просто «функция», если у последней нет собственного аргумента.

Крайне жутко выглядит, но стало гораздо удобнее.

Ну, а закончу рассказ на том, что даже сборка прикрепляемых архивов на странице релизов стала осуществляться с помощью конфига Github Actions. Как можно заметить, для создания архива под версию для PowerShell 7 приходится выкачивать две библиотеки с ресурсов Microsoft, так как загрузить файлы больше 25 МБ в репозиторий невозможно. Автоматизируй автоматизацию!

Итоги

Это были крайне плодотворные полгода. У нас такое ощущение, что мы прошли PowerShell на уровне «Ultra Violence». Ну, а что дальше? Параллельно я прорабатываю вариант, как реализовать, используя текущий паттерн взаимодействия пользователя со скриптом, настройку офлайновых образов WIM. Но главный приоритет для нас сейчас, конечно, — разработка SophiApp.

Цель проекта — показать, как, по нашему мнению, должен выглядеть, чувствоваться и каким функционалом обладать так называемый твикер для Windows 10. Идей — просто огромное количество! Хотя у нас нет опыта в разработке и нас всего лишь двое, а весь код на SophiApp пишет в одиночку Дмитрий, возможно, летом уже появится первый рабочий билд. Но это уже совсем другая история.

Хочу выразить огромную благодарность также пользователям forum.ru-board westlife и iNNOKENTIY21: ребят, без вашей помощи и подсказок, всё было бы по-другому! А логотип нарисовала художница tea_head, за что ей тоже спасибо. Скрины, использованные в материале, взяты из мультфильма Коргот-варвар. Группа в Telegram. Любите Windows 10, настраивайте её с умом и до новых встреч!

А если хотите прокачать себя, например получить навыки пентестера и зарабатывать на уязвимостях, или подтянуть знания алгоритмов и структур данных — приходите учиться в SkillFactory, будет сложно, но интересно!

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

  • Ccleaner для windows 10 онлайн
  • Ccleaner для windows 10 pro крякнутый скачать на русском бесплатно
  • Ccleaner для windows 10 крякнутый pro 2023
  • Cbdhsvc что это за служба windows 10
  • Ccleaner для windows 10 как пользоваться ccleaner