Windows 11, 10, etc - Вадим Стеркин
13.8K subscribers
279 photos
5 videos
8 files
1.04K links
Авторский канал. Windows, безопасность, мобильный мир:
• тайное знание
• профессиональный ликбез
• гадание по логам
• срыв покровов
• доставка пруфов

Чат: @winsiders
Блог: outsidethebox.ms
Oбратная связь: @vsterkin
Поддержать ₽: boosty.to/sterkin
Download Telegram
⚙️ О пользе бэкапа реестра и точек восстановления

В августе два человека написали в чат и в личку о том, что после перезагрузки для установки обновлений их системы ушли в циклическую перезагрузку (aka boot loop или бутлуп). Им не помогли различные меры, включая пляски с ключом dism /RevertPendingActions и далее реестром для отката отложенных действий по установке исправлений.

Поскольку парни были из секты отрицателей точек восстановления, а бэкап реестра не включали, им пришлось скрепя сердце сделать чистую установку 🙄 И я бы не стал писать об этом, если бы не случай на работе.

🔌 После аварийного отключения электропитания у моей основной удаленной машины отвалился Hyper-V, жалуясь на остановленную службу. Ее перезапуск не помогал, поэтому я без задней мысли отправил машину в живительный ребут и... получил бутлуп!

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

Бэкап реестра у меня отсутствовал, но точки точно были, и я запросил список теневых копий: vssadmin list shadows. Их оказалось три, что по идее должно было соответствовать количеству точек. Но поскольку сисадмин всех точек не видел, мы извлекли кусты реестра из теневых копий и заменили ими текущие.

🎉 И успешно загрузились в Windows, к восторгу сисадмина, который раньше таких сальто не выполнял :)

Тут бы и сказочке конец, но всё-таки состояние CBS оказалось повреждено. Потому что при попытке установить обновления система опять свалилась в бутлуп. Мне снова вернули кусты реестра, и я попробовал RestoreHealth с указанием на индекс WIM. Не помогло 🤷‍♂️

Однако к тому моменту я уже убедился (примерно так), что точек восстановления больше одной. Возврат к точке двухнедельной давности исправил все окончательно, августовские обновления тоже установились без проблем, а Hyper-V о сбоях даже не заикался

Мораль истории в том, что ни точки восстановления, ни резервная копия реестра не гарантируют вам успешного возвращения системы к жизни. Но они повышают вероятность такого события, тем более в совокупности. И особенно в ситуации, когда ваши возможности и навыки ограничены средой восстановления. Короче, не стесняйтесь подстилать соломку ✌️
🔐 KeePass: автоматический ввод и порядок записей

У KeePass есть зачетная функция Auto-Type с двумя ключевыми режимами работы. Чтобы выполнить автоматический ввод учетных данных в активное поле на сайте или в программе, вы можете:
🔹 выбрать запись в базе и нажать Ctrl+V
🔹 нажать Ctrl+Alt+A для поиска подходящей записи по всей базе и входа с ней

ℹ️ Во втором случае KeePass может найти более одной записи и предложить выбор из списка. Например, когда в базе несколько записей для:

• Окон с одинаковым заголовком вроде Login. Это довольно частая ситуация, кстати.

• Разных последовательностей автоматического ввода на одном ресурсе. Например, для входа в корпоративный RunDeck мне требуется аккаунт и пароль. А после входа для запуска джобов с тем же аккаунтом - только пароль.

На практике для часто используемых ресурсов один вариант задействуется чаще других. И хочется, чтобы он всегда был первым в списке. Тогда после Ctrl+Alt+A можно сходу жать Enter нежели сначала еще выбирать нужную запись.

Да, весь этот пост про то, как не нажимать стрелку лишний раз 😎 И про автоматический ввод, конечно.

👉 Для изменения порядка записей в окне Auto-Type есть неочевидный способ.
1. Задайте в меню "Вид" порядок без сортировки: View - Sort by - No Sort.
2. Выделите нужную запись и нажмите Alt+Home, чтобы поднять ее в самый верх либо жмите Alt+↑ или Alt+↓ для перемещения на одну позицию вверх/вниз.

Определив порядок, верните любимую сортировку в меню "Вид". Теперь в окне Auto-Type записи будут в том порядке, который вы задали.

ℹ️ Все записи по теме: #autotype

////

А вы пользуетесь функцией автоматического ввода в KeePass?
👍 - Ctrl+Alt+A
👌 - Ctrl+V
👀 - а что, так можно было?
- мне это не нужно / нет KeePass
⚙️ Почему точки восстановления создаются сериями

Готовя предыдущий пост о пользе точек восстановления, я заглянул в список своих точек и увидел странную картину↓ Налицо две серии точек, созданных Windows Update в течение минуты: две точки подряд 23 августа и три подряд 19 августа. Я не раз видел такое и раньше, но на сей раз решил покопаться в причинах.

▶️ В истории центра обновлений Windows в эти дни нет ничего кроме сигнатур защитника. Придётся срывать покровы с журналов событий с помощью #PowerShell. Я показывал в канале работу с датами с Get-Date и быстрый опрос всех журналов сразувозвращался к теме в контексте Windows 10). Сводим все вместе, выбрав четырехминутный диапазон вокруг даты создания точки.

$s = Get-Date -Year 2023 -Month 08 -Day 23 -Hour 00 -Minute 04
$e = Get-Date -Year 2023 -Month 08 -Day 23 -Hour 00 -Minute 08
Get-WinEvent -ErrorAction 0 -FilterHashTable @{
LogName='*'
StartTime=$s
EndTime=$e
} | sort ProviderName | Out-File -FilePath "$ENV:TEMP\sr.txt"


🛍 Сходу выяснилось, что 23 августа основной активностью было обновление магазинных приложений. Связанных с этим событий было множество, но в итоге все свелось к обновлению двух приложений - непосредственно магазина и StorePurchaseApp, компонента для покупок. Поставщик Microsoft-Windows-Install-Agent тщательно протоколирует загрузку, а приложение легко определить по ИД вроде 9WZDNCRFJBMP.

8/23/2023 12:06:39 AM 2006 Information
Progress Update: Item = 9WZDNCRFJBMP  
Progress Stage = DownloadingProduct, Completed = 332800,
Total = 19636239, Total = 3


Аналогично 19 августа обновились три приложения - WhatsApp, DesktopAppInstaller и почта/календарь.

👉 Количество обновленных приложений совпало с числом созданных точек восстановления!

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

Однако смысл всего мероприятия от меня ускользает. По умолчанию Windows не создаёт точки чаще 24 часов. Это обходится твиком реестра и, как мы видим, программным способом. Но зачем? 🤷‍♂️

Ведь точки восстановления создаются для конечного пользователя. Допустим, мне нужно восстановить систему. Я вижу три точки, созданные в один день с разницей в несколько секунд 🤔 Ну, наверное, я выберу самую раннюю... или любую :)

Возможно, это неэффективный код или баг. А не исправляют, потому что нет реальных проблем. Но эту теорию мы сможем подтвердить, только если поведение изменится ✌️
⚙️ Новое в блоге: Однократное выполнение команд для всех новых пользователей с помощью файла ответов

Однажды в бот поддержки пришел человек с вопросом, почему при установке с файлом ответов у него часть интерфейса системы на английском языке. Однако из скриншота↓ этого не следовало! На самом деле слева не системный интерфейс, а магазинное приложение "Безопасность Windows".

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

➡️ Решение в блоге: https://www.outsidethebox.ms/22075/
🛍️ Почему из магазина Windows некоторые приложения нельзя скачать без аккаунта Microsoft (MSA)

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

Немного погадав на кофейной гуще, я вспомнил про winget! Когда у winget еще не было установки из репозитория магазина (msstore), я спрашивал в Твиттере у ПМа о сроках реализации. Он сослался на ряд сложностей, упомянув в частности лицензионные аспекты и возрастной рейтинг! 👈 Кстати, я рассказывал об этом в канале.

Команда winget search telegram нашла официальный клиент только в репо winget. Тогда я посмотрел возрастной рейтинг непосредственно в магазине - Mature 17+. Все сходится!

Примечательно, что Unigram (сторонний UWP клиент) есть в репо msstore↓ В магазине он имеет возрастной рейтинг Everyone и не требует MSA для установки ✌️
⚙️ Защита и восстановление системы при наличии томов с файловой системой ReFS

После мини-серии про защиту системы (раз, два) читатель Валерий доставил в личку ошибку 0х81000203 при открытии настроек↓

Текст ошибки почти ничего не объясняет, хотя намекает на проблему в GUI нежели в функциональности под капотом. Код ошибки просто означает The parameter is incorrect. Однако читатель уточнил, что в системе есть тома, отоформатированные в ReFS.

ℹ️ В таких случаях диагностику можно начинать с проверки поведения на другой системе. Я вспомнил, что другой читатель, WindR, экспериментировал с ReFS, и он подтвердил ошибку.

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

Таким образом, можно с большой долей вероятности утверждать, что дефект ограничивается графическим интерфейсом. Все-таки вкладку не трогали как минимум 10 лет (в диалоге настроек послeдние изменения были в Windows 8). Возможно, ожидались только отформатированные в NTFS тома, а наличие ReFS ломает логику ✌️
💿 Alex Soft, Windows XP, Lingvo 9 serial#.txt и архивы Компьютерры

А вы с какими дисками до сих пор не расстались? Кидайте фотографии в обсуждение 👌
🧩 Новое в блоге: Дело об отсутствующей кнопке «Да»

Вообще, серия «дел» в этом блоге зарезервированa для Шерлока Холмса, но здесь слишком близко. Сегодня в рубрике «Стрелок в ногу» — любитель тонкой настройки Windows. Он скрыл единственного админа с экрана приветствия и обнаружил, что в окне контроля учётных записей пропала кнопка «Да».

Одновременно в рубрике «Возвращаясь к напечатанному» — классика блога Дело о заблокированной кнопке «Да». Именно ее сходу посоветовали в форуме для решения проблемы. Однако у автора темы кнопка не заблокирована, а отсутствует напрочь!

➡️ Читайте в блоге https://www.outsidethebox.ms/22086/
⚙️ Работает ли в утилите defrag.exe ключ /w

Вопрос задали на форуме. Действительно, начиная с Windows 8 во внутренней справке утилиты ключ не указан, а также отсутствует в текущей документации. Однако та же продуктовая группа во времена Windows 8 далеко не сразу раскрыла новые ключи оптимизации дисков. И вообще, к дефрагу у меня отношение "доверяй, но проверяй" :)

ℹ️ В Windows 7 описание звучало так: выполняет полную дефрагментацию, пытаясь объединять все фрагменты вне зависимости от их размера.

Заметьте, что гарантий тут нет, только попытка. И непонятно, что считается большим размером. Допустим, это фрагмент более 64 MB - при запуске с ключом /v утилита пишет, что не включает такие в статистику фрагментации.

Я кратко описал автору вопроса методику проверки и предложил провести ее самостоятельно, но он слился 🤷‍♂️ Хотя ничего сложного тут нет. Понадобится небольшой раздел (10 GB ок) и утилита для фрагментации файлов MyFragmenter, работу с которой я показывал в блоге. Идем тем же путем.

Здесь только команды, а их вывод тут https://pastebin.com/myb8CyFR

1️⃣ Создаем два файла, разбитых на 10 фрагментов, по 128 MB и 32 MB соответственно. То есть х2 и х0.5 относительно предполагаемой границы большого фрагмента 64MB.

myfragmenter e:\test1.txt -s 1280000 -p 10
myfragmenter e:\test2.txt -s 320000 -p 10


Да, я знаю про 1024, но тут это неважно.

2️⃣ Проверяем количество фрагментов утилитой contig - все совпадает.

contig -a e:\test1.txt
contig -a e:\test2.txt


3️⃣ Выполняем дефраг сначала без ключа /w.

defrag E: -u -v

4️⃣ Повторяем contig. Второй файл с фрагментами по 32 MB уже дефрагментировался. А первый - нет.

5️⃣ Выполняем дефраг с ключом /w.

defrag E: -u -v -w

6️⃣ Повторяем contig. Ничего не изменилось. Первый файл остался фрагментированным.

Я отформатировал раздел и повторил эксперимент с фрагментами по 70.5 и 57.5 MB, т.е. на 10% больше и меньше 64 MB. Получил аналогичный результат.

👉 Выводы

Поскольку это тестирование на коленке, без какой-либо документации, то и выводы далеко идущими объявлять не стоит. Но тем не менее.

🟢 Размер большого фрагмента действительно в районе 64 MB. Предполагаю, что значение не высечено в камне, поэтому погрешности в 10% достаточно.

🟢 В современных Windows с ключом /w большие фрагменты не дефрагментируются.

Неплохо бы провести такой же эксперимент на Windows 7 - вдруг там было то же самое :) Но у меня такой старой системы уже нет. Если у вас завалялась, поделитесь аналогичным отчетом ✌️
💩 Новое в блоге: О приложении Windows Backup и резервном копировании Windows в 2023 году

На протяжении последних двух лет, с момента первого выпуска Windows 11, Microsoft занимается перенаправлением резервного копирования с локальных дисков в облако.

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

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

➡️ Читайте разбор в блоге: https://www.outsidethebox.ms/22119/
⚙️ Новая вкладка в Chromium: как заменить содержимое на свою страницу

Сегодня в рубрике "Возвращаясь к напечатанному" полная замена содержимого новой вкладки в браузерах на основе Chromium. В 2017 году я публиковал два способа:

🔹 свое расширение
🔹 стороннее расширение New Tab Redirect с перенаправлением на локальную HTML-страницу с фоновой картинкой

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

👉 Быстрое тестирование выявило, что проблема возникает исключительно с локальной веб-страницей. Это я выяснил, закинув её вместе с картинкой на сервер своего блога. Видимо, в Chromium закрутили какие-то гайки.

Решение понятно. Но поскольку ссылка на страницу отображается в адресной строке новой вкладки, пользователь запросил что-то более нейтральное / анонимное. Задача сводится к тому, как бесплатно создать свой статичный веб-сайт за 5 минут 🌐

Я выбрал такой вариант:

1. Создал аккаунт на GitHub с именем типа g5LBWB5NQ0TnDecF

2. Создал новый публичный репозиторий с именем g5LBWB5NQ0TnDecF.github.io (совпадение с именем пользователя обязательно)

3. Прямо в браузере загрузил в корень репо файл index.html и прописанную в нем картинку pic.jpg

<!DOCTYPE html>
<html>
<title>New Tab</title>
<!-- Своя картинка -->
<body style="background-image: url(pic.jpg);
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;">
</body>
<!-- Просто цвет
<body style="background-color:#333333;"> </body>
-->
</html>


4. В расширении New Tab Redirect указал https://g5LBWB5NQ0TnDecF.github.io

Готово! ✌️
🔐 О состоянии шифрования BitLocker по умолчанию в Windows

Второй день из каждого утюга вещают, что в Windows 11 Pro по умолчанию включено шифрование BitLocker, что влечет снижение производительности SSD до 45%. Первоисточник - Tom's Hardware, а дальше уже может зависеть от фантазии переводчика.

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

Эти утверждения в совокупности вводят в заблуждение:

• Windows 11 Pro форсирует включение шифрования, а на Windows 10 Pro шифрование скорее всего не включено.

• Если у вас [в Windows 11] локальный аккаунт нежели учетная запись Microsoft (MSA), шифрование не включается.

• Windows 11 Home не поддерживает BitLocker, поэтому там шифрование не включается. (Однако автор тут же оговаривается: кажется, на некоторых ноутбуках включено :)

👉 У меня есть подробная #классика блога на эту тему: Автоматическое шифрование BitLocker в Windows. И подзаголовок там в самый раз :) Рекомендую вам прочесть рассказ целиком, а здесь задействую некоторые моменты.

ℹ️ На самом деле шифрование устройств с помощью BitLocker автоматически включается начиная с Windows 8.1 во всех изданиях. Но происходит это только на устройствах, соответствующих определенным требованиям, которые со временем слегка ослабили. Поддержка автоматического шифрования проверяется элементарно.

🔓 Если устройство подходит, BitLocker включается во время установки с незащищенным ключом и приостанавливается. В английской терминологии это состояние называется Suspended, и задать его можно командлетом #PowerShell Suspend-Bitlocker. На картинке↓ шифрование включено, но приостановлено - диск зашифрован, но не защищен. Поэтому неверно заявление автора тестов, что с локальным аккаунтом диск не шифруется.

🔑 Когда первый вход выполняет администратор с MSA или компьютер вводится в домен, шифрование активируется и защищается TPM. Одновременно 48-значный пароль восстановления сохраняется в облачных настройках MSA, а в домене – в Entra ID или AD DS при включенной политике.

Проверка заявлений, касающихся производительности, тоже не помешала бы. Но я оставляю ее вам. С помощью CrystalDiskMark можно относительно быстро прикинуть влияние любого программного шифрования на свою систему. Только, пожалуйста, тестируйте производительность диска, а не его кэша ✌️
🗒 О сохранении и восстановлении сессий в Блокноте

Microsoft постепенно раскатывает всем нововведение в блокноте (версия 2309.28+). С настройкой на картинке↓ при запуске восстанавливаются все открытые в прошлый раз файлы, в том числе не сохраненные. Равно как при закрытии блокнота не задается вопрос, сохранить файлы с изменениями или нет. И уж тем более блокнот перестанет блокировать завершение работы или перезагрузку 😎

Внешне это похоже на Notepad++, но есть нюансы.

1️⃣ Блокнот не сообщает об удалении или перемещении файла. Закрыв удаленный файл, вы потеряете его без предупреждения.

2️⃣ Синхронизация сессий между разными системами не предусмотрена. В N++ облачную папку можно указать в настройках. В блокноте такого нет, разумеется. Файлы сессии находятся в папке

%localappdata%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\LocalState\TabState\

Однако в отличие от N++, файлы блокнота хранятся не в текстовом формате. У них расширение BIN, а содержимое закодировано. Если переименовать папку, блокнот воссоздает ее после запуска. Но игнорирует подкинутые в нее файлы из старой папки. Поэтому не имеет смысла перенос папки в облако символической ссылкой 🤷‍♂️

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

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

А тут я изучал содержимое раздела Windows RE на разных системах. Менять свойства туда-сюда утомило с третьего раза, и я посмотрел в сторону #PowerShell. С целью прямого доступа нежели изменения свойств, потому что у Set-Partition не реализовано свойство Required.

ℹ️ В блоге я приводил GUID - идентификатор раздела восстановления, поэтому легко сделать выборку из списка разделов. Нас интересует свойство AccessPaths, т.е. путь доступа. (Его также можно посмотреть нативной командой mountvol, но в списке может оказаться без буквы также раздел MSR - на глаз не отличить.)

$id = "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}"
Get-Partition | where GptType -eq $id | select Type,AccessPaths

Type AccessPaths
---- -----------
Recovery {\\?\Volume{9896bfe9-69de-4db1-a6f4-ba4630addab3}\}


Теперь легко вывести содержимое раздела - рекурсивно, включая скрытые папки и файлы. Можно даже ванлайнером, но так нагляднее:

$id = "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}"
$lpath = (Get-Partition | where GptType -eq $id).AccessPaths[0]
Get-ChildItem -Force -Recurse -LiteralPath $lpath


Меня интересовало содержимое winre.wim, и скопировать его не составило труда:

Copy-Item -LiteralPath "\\?\Volume{9896bfe9-69de-4db1-a6f4-ba4630addab3}\Recovery\WindowsRE\Winre.wim" -Destination C:\temp\

В данном случае файл скрытый и системный, но про управление атрибутами файлов в PowerShell я уже рассказывал ✌️
👤 Пользователи: продвинутые vs. опытные

Словосочетание advanced users пришло к нам из английского языка в двух вариантах. Литературный перевод - опытные пользователи, а разговорный - продвинутые, просто калька с английского. Я, однако, исторически не ставил знак равенства между этими значениями.

👉 Для меня продвинутый пользователь - это тот, кто считает себя опытным, но таковым не является! :)

Тезис проще пояснить на примерах (П - продвинутый, О - опытный).

⚙️ Настройка системы

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

О: имеет скрипт / REG-файл, втч применяемый во время установки; не парится по поводу потребления памяти службами лет дцать

💾 Программы

П: устанавливает программы и утилиты на каждый чих, втч из сомнительных источников; предпочитает портативный софт на другом разделе

О: хорошо знает встроенные возможности ОС, задействует скрипты; утилиты держит в папке, где на запись нужны права админа

🔬 Изучение ОС и программ

П: экспериментирует на живой системе, что нередко заканчивается проблемами и даже переустановкой начисто

О: предпочитает виртуальные машины, бережет настроенную среду, годами обновляя основные ОС до новых версий и избегая чистой установки

Список можно продолжать, но идея понятна. А вы какой пользователь?

💪 - продвинутый
👌 - опытный

Ожидаю подавляющее преимущество опытных! :)
⚙️ Групповые политики Windows 11 23H2

🔷 ADMX Windows 11 23H2 - административные шаблоны.

🔷 XLSX Windows 11 23H2 - все параметры реестра групповых политик. Незаменимая штука для домашних изданий. Если, конечно, политика в них срабатывает.

Кстати, после выпуска XSLX для 22H2 в центр загрузки выкладывали два его обновления - версии 2 и 3. По ним можно отфильтровать новый файл - все новинки за год на картинке ↓

🔷 Веб: https://gpsearch.azurewebsites.net/ - новейшие политики появляются не моментально, зато удобно ссылаться.
▶️ Как массово удалить папки, распакованные из архивов

В чате участник Павел задал такой вопрос:
В папке ~450 разных файлов, папок и архивов *.rar. Периодически рары разархивируются, и получается папка с тем же именем, что и rar. Стоит задача удалить эти папки, оставив при этом архивы. Как отсортировать, чтобы снизу папки сразу был её родительский архив?

Очевидно, он рассматривал вариант сортировки в файловом менеджере. Хотя надо сразу смотреть в сторону #PowerShell. Для начинающих это отличное практическое упражнение! Впрочем, этому унылому занятию Павел предпочел ожидание поста в канале 😎

Я бы решал задачу в лоб:
1. Отбираем только папки.
2. Для каждой проверяем наличие архива с таким же именем, "приклеивая" к имени папки расширение.
3. При совпадении удаляем.

$folders = Get-ChildItem -Path "C:\test" -Directory
foreach ($folder in $folders) {
if (Test-Path "$($folder.FullName).rar")
{Remove-Item $folder -Recurse -WhatIf}
}


Василий Гусев предложил нестандартное решение - группировка! 🤔 Мне оно в голову не пришло, хотя я трижды показывал Group-Object в блоге:
поиск дубликатов драйверов
выборка уникальных ссылок с веб-страниц
замена дубликатов файлов на жесткие ссылки

Доработав идею, я получил такой конвейер:
1. Группируем по имени папки и файлы без расширения с помощью свойства BaseName.
2. Отбираем группы, где с одинаковыми именами ровно два объекта - файл и папка!
3. Из каждой группы выбираем папки и удаляем их.

Get-ChildItem -Path "C:\test" | Group-Object -Property BaseName |
Where-Object {$_.Count -eq '2'} | ForEach-Object {$_.group} |
Where-Object {$_.Attributes -eq 'Directory'} | Remove-Item -Recurse -WhatIf


⌛️ Примечательно, что с обоими способами перекликается #классика блога Как массово переименовать файлы по маске в PowerShell. Там я склеивал имя файла из фрагментов, одним из которых было свойство BaseName.

🤖 И неудивительно, что ChatGPT тоже задействовал это свойство, когда я поставил задачу перед ним. Он пошел тем же путем что и я, но выбрал перебор архивов нежели папок и создал побольше переменных. В свою очередь чат-бот Bing практически повторил мой способ. Но для определения папки он использовал старое свойство объекта PSIsContainer (параметр -Directory у dir доступен более 10 лет, с версии 3.0).

Короче, получив направление в PowerShell, Павел мог сразу спросить чат-бота. И не дожидаться, пока кожаный мешок опубликует решение его простенькой задачи в канале ✌️
🔎 О поиске на панели задач

На днях Noxy занес в центр отзывов любопытное предложение - переместить поле поиска в левую часть панели задач, рядом с кнопкой виджетов. Действительно, выравнивание панели задач по центру хорошо смотрится только у Microsoft на скриншотах чистой системы 😎

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

👉 Я считаю предложение интересным, но не имеющим шансов на успех в краткосрочной перспективе. Более того, отдельный поиск на панели задач вообще не нужен!

Мы же обходились без него с Windows Vista, т.е. с 2006 года. Открывали Пуск и вводили запрос. (Для поиска программ это был огромный глоток свежего воздуха по сравнению с трехэтажными меню XP.) Windows 8 многим сломала привычный UX - там не было ни кнопки Пуск, ни поля поиска на начальном экране. Хотя мой процесс не поменялся - быстрее всего нажимать клавишу Win и тут же печатать запрос ⌨️

В Windows 10 меню Пуск довели практически до совершенства, в том числе по отзывам пользователей. Но поле поиска туда так и не добавили. Я видел несколько человек, пересевших с Windows 7 на 10 и поначалу входивших в ступор: "А куда вводить запрос?" Именно для них на панель задач воткнули кнопку поиска, которую с годами старательно разукрашивали. Оформляли её в виде фейкового поля поиска и внедряли туда разноцветную движуху 🎉

В Windows 11 поле поиска вернули в меню Пуск, но с панели задач поиск не убрали. Возможно, потому что с 2015 года уже приучили пользователей тыкать в эту ненужную кнопку. А еще скорее из-за маркетинга - цветное мельтешение на панели задач всегда перед глазами, а ведет оно в Bing! Не случайно одно из недавних обновлений включало убранный с панели задач поиск 🙄

Да, размещение поля поиска слева частично решит проблему с центрированием панели задач (хотя эффект будет минимальным, когда вместо поля - кнопка). Но это породит другую нестыковку: одна и та же панель с результатами поиска будет открываться совсем в разных местах - Пуск посередине, а поиск слева 🤷‍♂️

И даже если поиск на панели задач нужен Microsoft и каким-то пользователям, его размещение слева имеет смысл только при выравнивании панели задач по центру (по левому краю даже кнопка виджетов правее Пуска). Внедрив смелое центрирование панели задач, Microsoft не решилась выпилить привычное расположение Пуска в левом углу. Сидеть на двух стульях неудобно, а долго сидеть - больно🪑🪑

Наконец, есть еще одна причина, по которой поиск на панели задач скоро станет лишним - Copilot! Сейчас он не способен заменить локальный поиск, но должен же этому научиться. Иначе такой ИИ нам не нужен! Поэтому пока мы будем видеть поиск на нынешнем месте, а Copilot вполне может прописаться в трее - в инсайдерских сборках экспериментируют с этим. Но такое расположение лишь усугубляет проблему с перекосом панели задач! 🙈

Возможно, когда наступит время заменить поиск, поле Copilot действительно разместят слева и будут там же открывать боковую панель. Без заметных изменений Пуска и панели задач не обходится ни одна новая ОС Microsoft. Ждем новую волну смелых дизайнерских решений в Windows 12 ✌️
🛍 Как удалить новые приложения Dev Home и Outlook в Windows 11

Вчера был второй вторник, а следовательно в Windows 11 22H2 всем пришло накопительное обновление с функциями Момент 4 - KB5032190. Оно или его превью необходимы для обновления до версии 23H2 - KB5027397. Это опять #тумблер - номер версии меняется переключателем, потому что у них одинаковая кодовая база. Если вам не предлагают 23H2 в центре обновления, проверьте эти причины. 👈

Обновление до 23H2 отчасти формальное, потому что большинство новинок доставляет Момент 4. Именно после его установки через диспетчер доставки содержимого принудительно прилетают два магазинных приложения - превью Dev Home и Outlook for Windows (замена магазинной Почте). У некоторых от этого подгорит. А уж когда они обнаружат, что не могут удалить Dev Home в графическом интерфейсе... 🍑🔥

Эти две команды в #PowerShell от имени администратора решают вопрос:

Get-AppxPackage -AllUsers | where Name -match 'DevHome|OutlookForWindows' | Remove-AppxPackage -AllUsers
Get-AppxProvisionedPackage -Online | where PackageName -match 'DevHome' | Remove-AppxProvisionedPackage -Online


ℹ️ Первая команда удаляет пакеты из всех учетных записей, вторая - из локального хранилища (туда внедряется только Dev Home). Оно служит источником установки при первом входе в систему. Подробнее об этих командах читайте в блоге. И не поленитесь поискать названия командлетов в канале - там много любопытного.

Однако удаление не блокирует доставку этих приложений в новые учетные записи. Если вы знаете поддерживаемый способ предотвратить установку, сообщите мне. О кривых обходных путях я, возможно, напишу отдельно ✌️
Опрос: какие из этих элементов закреплены у вас на панели задач в основной ОС Windows? Можно выбрать несколько вариантов.
Final Results
37%
Поиск (кнопка или поле)
19%
Представление задач (Task View)
7%
Виджеты (мини-приложения)
2%
Чат (Teams)
42%
Никакие
20%
Другое / Моего варианта тут нет