sterkin_ru | Блоги

Telegram-канал sterkin_ru - Windows 11, 10, etc - Вадим Стеркин

14409

Авторский канал. Windows, безопасность, мобильный мир: • тайное знание • профессиональный ликбез • гадание по логам • срыв покровов • доставка пруфов Чат: @winsiders Блог: outsidethebox.ms Oбратная связь: @vsterkin Поддержать ₽: boosty.to/sterkin

Подписаться на канал

Windows 11, 10, etc - Вадим Стеркин

🔃 Об увеличении и уменьшении размера обновлений Windows 11

Недавно в чат вбросили страшную цифру - размер майского накопительного обновления KB5058411 для Windows 11 24H2 составил 4.3 GB. Это только если скачивать из каталога Microsoft Update (MU), нежели через центр обновления Windows.

Июньское обновление KB5063060 похудело до 3 GB, но всё равно значительно тяжелее апрельского KB5055523, чей размер составлял 1.3 GB.

Я поковырялся немного и предлагаю вам свой разбор ситуации. Но сначала немного теории.

🔢 Состав накопительного обновления
У современных обновлений ОС [до сих пор было] три составляющих.

1️⃣ Чекпойнт служит фундаментом для ежемесячных обновлений начиная с 24H2. Если ОС прошла хоть один цикл обновления, это исправление уже установлено. Но когда вы скачиваете из каталога MU, чекпойнт прилагается в качестве отдельного MSU-файла. В июне 2025 года - это обновление KB5043080, выпущенное в сентябре 2024 года (MSU: 509 MB).

2️⃣ Сервисный стек (SSU) необходим для установки обновлений и обслуживания ОС. Обычно, пакет поставляется в комплекте с ежемесячным обновлением системных файлов. Но может выходить и отдельно, вне очереди (например, KB5061977). Удалению не подлежит.

3️⃣ Накопительное обновление системных файлов (LCU).

Пункты 2 и 3 образуют новейшее накопительное обновление. В каталоге MU они представлены в едином MSU-файле.

📃 Списки обновляемых файлов
В конце статьи базы знаний с описанием обновления есть ссылки на файлы CSV со списками файлов и их несжатыми размерами, раздельно для LCU и SSU. В сервисном стеке около 160 файлов, ими можно пренебречь. В LCU картина такая:

KB5055523 (2025-04): 19992 файла объёмом 6.19 GB
KB5058411 (2025-05): 21273 файла объёмом 6.51 GB

Из этих данных увеличение MSU на 3 GB не вытекает 🤷‍♂️ В скобках замечу, что обновляется около 20% системных файлов. Количество файлов в папке Windows показывает утилита diskusage.

🤐 Реальное содержимое обновлений
Пришлось скачать MSU и открыть их архиватором. Сразу многое прояснилось! На картинке слева показано апрельское обновление, справа - майское.

В мае добавилось множество пакетов MSIX. Их назначение можно угадать по манифесту внутри. Два первых попавшихся регистрируют такие расширения:

Microsoft.Windows.Internal.SemanticSearch.TokenizerSession
Microsoft.Windows.Internal.Vision.TextRecognizerSession

Явно что-то связанное с искусственным интеллектом. Действительно, в описании превью майского обновления есть нововведения, связанные с ИИ. Версии компонентов совпадают с MSIX.

////

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

В июньском таких тяжелых "дубликатов" поменьше. Дальше я не копал. Но такой вброс в MSU множества MSIX и волатильность их списка не выглядят хорошо спланированным изменением. Опять же, все эти добавленные файлы не отражены в документации к обновлению 🙄

////

Разумеется, при установке обновлений из Windows Update скачивается куда меньший объём данных. Не нужно тащить чекпойнт, а компоненты для ПК Copilot+ предлагаются лишь на определённом "железе".

Но есть ещё автономные компьютеры в организациях и системы с порушенными службами WU дома. Для них придётся скачивать тяжёлые MSU со всеми инновационными пакетами ИИ ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

Наглядно: почему Windows Backup - это не бэкап

На прошлой неделе на Reddit всплыл прекрасный пост, который растиражировали все профильные новостные ресурсы.

ТС собрал данные со всех старых дисков и залил их в облако OneDrive, чтобы потом перенести на новый большой диск. Но дальше что-то пошло не так, и его аккаунт заблокировали. В результате он лишился всего нажитого непосильным трудом за 30 лет 🤷‍♂️ В посте невыносимые страдания и полный игнор со стороны Microsoft.

Начать хотелось бы с обвинений жертвы 😎 Он сам устроил себе ситуацию "данные без бэкапа и без гарантии доступа". А для блокировки аккаунта может быть достаточно одной пиратской программы или одной фотографии своего голого младенца.

Но главный злодей здесь, конечно, Microsoft 😈 Компания без зазрения совести не просто рекламирует, но агрессивно проталкивает потребителям свое облачное хранилище как единственное решение для резервного копирования файлов. История вопроса в блоге: раз, два, три.

Разумеется, при этом нигде не обозначается риск потери доступа к аккаунту. И он не иллюзорный.

🕓 Четыре года назад, комментируя перенос истории файлов на задворки устаревшей панели управления, я писал в этом канале:

Я задействую OneDrive на всех устройствах, но отрицаю его в качестве единственного бэкапа. При использовании клиента в Windows двусторонняя синхронизация может привести к потере данных при удалении с хоста. Да, это компенсируется историей версий и корзиной на 30 дней с предупреждениями. Но у нас нет полного контроля над файлами в облаке. Представьте блокировку аккаунта!

За компанию представьте блокировку свой учетной записи Google, Яндекс, Mailru, Telegram или любого другого облачного сервиса, где у вас лежит единственная копия данных. Сохраните важные файлы локально прямо сейчас!

Да, облачный бэкап лучше, чем полное отсутствие резервных копий. Но только файлы в облаке уже не ваши ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🕒 Как предотвратить автоматическую перезагрузку после установки обновлений в Windows 11

Опубликованное в канале Расследование: кто перезагрузил Windows завершалось такими словами:

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

С тех пор несколько человек доставили еще один обходной путь, который позволяет откладывать перезагрузку "бесконечно" долго. Беру в кавычки, потому что нам не дано протестировать бесконечность :)

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

Это любопытный пример ситуации, когда поддерживаемыми способами система вводится в неподдерживаемое состояние. Поэтому в конце поста классическая и горячо любимая картинка 😎

Поскольку настройки периода активности задаются в реестре, скрипт несложный. Берем текущее время, добавляем к нему 18 часов (максимальный диапазон) и устанавливаем полученное значение для начала и конца периода активности. Примечательно, что параметры хранятся в разделе HKLM, но группе "Пользователи" запись туда разрешена.

▶️ Подписчик Алексей Батищев выложил на GitHub скрипт #PowerShell с установщиком и VBS (для скрытия консольных окон).

В установщик имеет смысл дописать запуск задания по факту добавления в планировщик. А в самом задании прописать -StartWhenAvailable (немедленный запуск после пропуска) и поменять частоту запусков с получаса до 12 часов.

////

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

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

☁️ Новое в блоге: Яндекс Диск 4.0 - нюансы установки и синхронизации

Время от времени я пишу про OneDrive - это мой единственный облачный клиент. Но Яндекс Диск у читателей канала более популярен 📊

Его новая версия 4.0 вышла 22 мая. Я бы не стал про неё писать, если бы не суть нововведений. Этот пост куда больше про Windows, чем про Яндекс :)

Опытному глазу уже из сравнения версий 3.0 и 4.0 видно, что теперь взаимодействие с облачными файлами Яндекса будет мало чем отличаться от OneDrive!

В чате пара человек, едва ознакомившись с новой версией, сходу отложили кирпичи 🧱 Мои рекомендации устранили боль либо уменьшили ее. Я собрал в статью эти советы по установке и использованию Диска:

📂 Настройте расположение папки с облачными файлами

🛡 Установите Диск в папку Program Files

🗃 Освойте файлы по запросу

👥 Настройте работу в нескольких аккаунтах Яндекса

Также в статье есть решения пары проблем.

➡️ https://www.outsidethebox.ms/22664

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🔐 Новое в блоге: О беспарольной аутентификации с ключами доступа

В начале мая в одном из блогов Microsoft вышла программная статья Pushing passkeys forward. Из неё в новости попало лишь объявление о том, что учётные записи Microsoft (MSA) по умолчанию будут создаваться беспарольными. Это я уже разобрал в канале.

🔑 При этом статья Microsoft в целом была посвящена ключам доступа (passkeys). Это относительно новый способ беспарольной аутентификации. Его активно продвигают лидеры ИТ-индустрии – Microsoft и Google, что неудивительно при их огромной пользовательской базе.

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

📊 Между тем, опрос в канале показал, что лишь 30% читателей пользуются ключами. Столько же первый раз о них слышат! Еще 27% уверены, что им это не нужно (но не факт, что все они чётко понимают принцип работы и преимущества технологии :)

Ключи доступа привязаны к устройствам, на которых они создаются и хранятся. Каждое устройство (например, компьютер под управлением Windows) можно сравнить с сейфом. В нём лежат ключи к различным аккаунтам...

➡️ Читайте дальше в блоге: https://www.outsidethebox.ms/22646/#go

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

Представьте, что злоумышленники сами дают вам «дружеские» рекомендации. Читайте, проверяйте себя и запоминайте, как делать НЕ НАДО!

🤡 Смело переходить по неизвестным ссылкам

«Вы выиграли миллион!» — ну это же точно правда (НЕТ).

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

🤡 Использовать самый простой пароль 123456

Зачем усложнять: быстро вводится, легко запоминается (НЕТ). 

Слабый пароль взламывается за секунды. Безопасный пароль — это длинная и уникальная комбинация букв, цифр и символов.

🤡 Верить всему, что видите в Интернете

Если друг пишет, что ему срочно нужны деньги — значит нужно быстро ему помочь. Голосовые сообщения – стопроцентное доказательство, что это точно он (НЕТ). 

Дипфейки и взломанные аккаунты – стандартный инструмент злоумышленников.

А теперь серьезно: все вышеперечисленное – прямой путь к взлому и потере данных. Будьте на шаг впереди злоумышленников, подписывайтесь на канал Индид – компании, создающей решения в области Identity Security, и прокачивайте свою цифровую безопасность.

📌Присоединяйтесь и читайте полезные материалы, которые помогут защитить ваши данные.

#реклама
О рекламодателе

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🔐 О входе в учётную запись Microsoft без пароля

В конце прошлой недели все профильные ресурсы раструбили новость: отныне новые учётные записи Microsoft (MSA) будут по умолчанию беспарольными. Реакция сообщества была неблагосклонной. Как будто это что-то плохое 😎

Беспарольность воспринимается как небезопасный отказ от надёжных паролей. К этому примешивается недоверие (ненависть?) к учётной записи Microsoft. Слабое знание матчасти порождает дичь в некоторых новостях и комментариях к ним 🙄

На самом деле беспарольная MSA существует очень давно. И для потребителей - это самый простой, удобный и безопасный способ входа в аккаунт Microsoft!

🌐 При двухфакторной аутентификации в вебе или приложении вы:

1. Получаете на смартфоне уведомление.
2. Нажимаете двузначное число, которое видите на экране.
3. Подтверждаете вход ПИН-кодом или биометрией.

И это всё! В картинках тут. За последние три года я ни разу не применял одноразовый код для #2FA в MSA. Беспарольный процесс удобнее.

🔢 Входить с MSA в Windows с Hello, т.е. посредством ПИН-кода или биометрии, можно уже лет шесть. А сделать такой способ входа единственным - почти пять лет. До сих пор многие воспринимают ПИН-код как нечто менее безопасное в сравнении с паролем. Однако ПИН-код может быть таким же сложным как пароль, при этом он защищается TPM и не передаётся по сети. Вот я пишу в канале про это почти 8 лет назад :)

Я также разбирал нюансы беспарольного входа в Windows в блоге. И в связи с новостью у меня лишь два вопроса.

🔹 Можно ли будет создать беспарольную учётную запись из-под Windows? Сейчас это возможно только на мобильных ОС. Причина в статье блога↑

🔹Можно ли будет войти в локальную среду восстановления с ПИН-кодом? При загрузке с флешки пароль не требуется, но это неприемлемый способ для массового потребителя. Сейчас есть только обходной путь - 48-значный пароль восстановления BitLocker. Впрочем, теперь Microsoft его полностью легитимизировала, включив автоматическое шифрование по умолчанию. Такой вот ход конём 🐴

Думаю, что в этих двух аспектах ничего не изменится. В итоге тиражируемая новость практически "ни о чём". Слегка поменяется логика создания учётной записи Microsoft, да и только.

В оригинале же основная часть обращения Microsoft к клиентам была про ключи доступа. Что не новость, но посвежее беспарольного входа и тоже удобно на практике. И я напишу про них в ближайшее время. Тем более, что черновик записи уже был готов в качестве ответа на вопрос читателя. Не переключайте каналы ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🛍 Как открыть магазинное приложение, если у него нет ярлыка

И в Пуске оно тоже не находится. Этот вопрос задал мне подписчик Андрей К в контексте приложения Сообщения оператора (Operator Messages). Оно показывает служебные SMS мобильного оператора на устройствах с поддержкой 4G/5G.

Как я понял, приложение само открывается для отображения входящих SMS. Но если его закрыть, то потом уже не открыть. Андрей упомянул, что приложение можно закрепить на панели задач. И для меня это уже выглядит решением ✔️

Возможно, он не хотел занимать место на панели задач, предпочитая отдельный ярлык на рабочем столе. В этом случае следует закрыть закрепленное приложение - щелкнуть значок правой кнопкой мыши, удерживая Shift и выбрать пункт "Создать ярлык" или "Отправить -> Рабочий стол" ✔️

Но допустим, что таких пунктов в меню не оказалось. Либо автор вопроса хочет запускать приложение из командной строки. Короче, этюдная задача с элементами матчасти :)

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

1. Поищите protocol в Параметрах и откройте страницу с приложениями по умолчанию.
2. В самом низу откройте раздел для сопоставления приложений типам ссылок.
3. Найдите приложение глазами, ориентируясь на значок. (На странице есть фильтр, но только по протоколам, а его-то мы и не знаем :)

✅ В данном случае находится URL:ms-chat. И этого достаточно для решения задачи! У вас это приложение вряд ли установлено, поэтому для наглядности я заменил протокол ms-chat: на ms-calculator:. Вот разные способы открытия:

• окно Win+R: ms-calculator:
• произвольный ярлык: explorer ms-calculator:
• командная строка: start calculator:

Да, протокол calculator: там тоже есть :)

////

ℹ️ Протоколы регистрируются в реестре. Полный список протоколов Microsoft легко отобразить с помощью #PowerShell

New-PSDrive -Name "HKCR" -PSProvider Registry -Root "HKEY_CLASSES_ROOT"
Get-Item HKCR:\ms-* | select name

Не все они будут открывать какое-то приложение. Но в большинстве случаев это сработает.

Читателям со стажем эта тема покажется знакомой. Я как-то рассказывал в канале про быстрый доступ к страницам Параметров. И там всё строится именно на протоколе ms-settings! ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

«А хватит ли моего английского, чтобы работать за границей?»

Этот вопрос не даёт покоя многим специалистам.

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

Если ты откладываешь работу за рубежом “до лучших времён”, пока не подтянешь английский — есть один вебинар для тебя.

📆 24 апреля в 19:00 мск.
Ведёт Настя Алексюк
— преподаватель AgileFluent, 8 лет опыта в деловом и техническом английском, параллельно работает менеджером продукта в американском стартапе.

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

Вебинар бесплатный и с пользой: ты выйдешь с чётким пониманием, что прокачивать и как.

🎁 А еще всем участникам — бонус: полезные материалы + скидка на занятия в AgileFluent!

👉 Регистрируйся по ссылке: https://agilefluent.ru/web-240425

Реклама. ООО «Эджайл», ИНН 7810964334, erid: 2VtzqwsBqWA

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

⚙️ Нюансы применения ZDP во время установки Windows

В терминологии Microsoft термин ZDP - это Zero Day Patch или Zero Day Package или Zero Day Priority [update] в зависимости от источника.

Осенью 2024 года я анализировал причину долгой установки Windows. Очень внимательный читатель Олег поймал меня на несоответствии. Его внимание привлекла эта фраза:

Первым делом обновляется сам OOBE - пакетом OOBE ZDP.

⌛️ Подписчик перешел по ссылке в блог Рэймонда Чена. И процитировал мне, что ZDP служит вовсе не для исправления багов OOBE. Это некий пакет самых критичных исправлений ОС для установки на этапе OOBE. Он должен быть маленьким, чтобы побыстрее установиться.

📄 Однако Чен писал в 2016 году, и с тех пор много воды утекло! Текущая реальность в журналах установки. Я пообещал Олегу разбор в канале. И сегодняшний пост публикуется в рубриках "гадание по логам" и "доставка пруфов"!

Нас интересуют файлы из папки C:\Windows\Panther (ссылки на pastebin):
setupact.log (фрагмент) с основными событиями установки ОС
UnattendGC\setupact.log с событиями ОOBE

🖼 Далее комментарии к строкам второго файла, из них на картинку вошли 442 - 462.

106 - загружается ZDP Plugin
442 - ожидаем результатов поиска от WU ZDP
443 - нашлось одно обновление (это KB5046683 для OOBE, строка 69 во фрагменте основного логе)
450 - установка успешная
451 - требуется перезагрузка
453 - пошли события после перезагрузки

На этом упоминания ZDP заканчиваются! Дальше идет установка последнего накопительного обновления (LCU).

462 - начат поиск срочных обновлений
495 - идет загрузка KB5044284

ℹ️ При установке с файлом ответов этого не происходит.

////

На основе этих логов я и сделал выводы:

1️⃣ Посредством OOBE ZDP сейчас обновляется только сам процесс OOBE, и это действительно маленький пакет.

2️⃣ Критические обновления ОС и сервисный стек устанавливаются в рамках стандартного LCU.

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

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

☁️ OneDrive: как исключить определенные типы и имена файлов из синхронизации

Допустим, вы синхронизируете в облако папки "Рабочий стол" с двух разных компьютеров. Их содержимое смешивается. Это неудобно, когда у вас там ярлыки на разные программы либо на папки, которые не входят в сферу синхронизации. С таким подтекстом Aliaksandr задал в чате вынесенный в заголовок вопрос, хотя звучал он совсем иначе.

🐞 В принципе, в параметрах клиента OneDrive есть настройка для исключения расширений. Но с ней есть две проблемы:
1. Расширения должны состоять не менее чем из трех символов. Например, md не исключить.
2. Настройка не работает :) По крайней мере так, как люди ожидают. Множество жалоб в интернете подтвердили, что это не просто моя локальная проблема. Некоторые также правят INI-файл политик клиента, но безуспешно.

///

👉 Мы пойдем другим путем © У OneDrive есть групповые политики, и в изданиях Pro и выше можно решить вопрос политикой Exclude specific kinds of files from being uploaded (Исключить отправку определенных видов файлов).

⚠️ Учтите, что:
1. Политика применится только к новым файлам, то есть не будут исключаться уже существующие файлы, втч переименованные после включения политики. Поэтому придется навести порядок руками - например, пересоздать ярлыки.

2. Политика работает только с именами файлов и не действует на имена папок. Но папки можно исключить в настройках клиента.

3. Чтобы эта и другие политики OneDrive отобразились в графическом интерфейсе gpedit.msc, нужно закинуть административные шаблоны из папки с клиентом OneDrive в %systemroot%\PolicyDefinitions. Но прямая правка реестра работает и без этого.

⚙️ Изменения в реестр можно внести из консоли от имени администратора или REG-файлом. В этих примерах не будут синхронизироваться ярлыки и файлы с именем вроде mytest.txt.

reg add "HKLM\SOFTWARE\Policies\Microsoft\OneDrive\EnableODIgnoreListFromGPO" /v "*.lnk" /t REG_SZ /d "*.lnk" /f

reg add "HKLM\SOFTWARE\Policies\Microsoft\OneDrive\EnableODIgnoreListFromGPO" /v "*test*" /t REG_SZ /d "*test*" /f

После внесения изменений в реестр перезапустите клиент OneDrive и ваш файловый менеджер.

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

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

▶️ Простой и эффективный поиск текста в PowerShell - Select-String

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

Как правило, люди открывают Notepad++, загружают туда пачку логов и выполняют поиск во всех открытых файлах. На предложение использовать скрипт пожимают плечами - мол, это же разовая задача. И так сойдет 👌

У этого подхода много проблем:
1. Медленно.
2. Не выгружается сводка и найденные данные.
3. При большом количестве / размере файлов это работает плохо или вообще никак.

Да и не разовая это у них задача, поэтому скрипт подходит отлично.

👉 В #PowerShell для этой цели есть командлет Select-String. Он умеет искать простое совпадение или регулярное выражение.

Select-String -Path 'C:\logs\*.log*' -Pattern '0x800f0805' -SimpleMatch
Select-String -Path 'C:\logs\*.log*' -Pattern '0x800f0805|0x80070490'

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

🤖 Чат-боту задача по поиску текста ставится общими словами. Например, найди все строки с 'exception ' в этих файлах, посчитай количество на каждый файл, запиши в файл эту строку и 20 следующих, выведи на экран сводку и т.д.

И бот быстро пишет рабочий скрипт. Только он зачастую использует другой командлет - Get-Content. А для такой задачи это неэффективно - слишком медленно!

Простое сравнение. Ищем ошибку '0x800f0805' десяти файлах cbs.log общим объемом около 1.2GB.

$logpath = "C:\temp\logs\*cbs*.log"
Measure-Command {
$a = Select-String -Path $logpath -Pattern '0x800f0805' -SimpleMatch
}
$a.count
Measure-Command {
$b = Get-Content -Path $logpath | where $_ -match '0x800f0805'
}
$b.count

У меня Select-String справился за 7.5 секунд, а Get-Content понадобилось 4 мин и 40 секунд.

💡 И кстати по поводу контекста, у Select-String есть очень полезный параметр -Context, который выводит строки до и после найденного совпадения.

Select-String -Path $logpath -Pattern 'exception ' -SimpleMatch -Context 2,20


////

В общем, если вам нужно дальше работать с чистыми найденными строками в качестве объектов, Get-Content имеет смысл. Но просто для поиска текста Select-String вполне достаточно. И да, можно сказать чат-боту, чтобы применял конкретный командлет!

🍪 Бонус - #классика канала про мониторинг логов в реальном времени при помощи:
• командлета PowerShell
• утилиты CMTrace

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

⚙️ Как удалить ассоциацию программы с типом файлов

В чате Zubastic задал этот вопрос в контексте файлов без расширения - некая программа предательски захватила ассоциацию с ними.

Вариантов регистрации много. Самый простой и работающий с незапамятных времен - программа прописывает себя в разделе HKCR\ProgramName, в том числе команду на запуск в разделе HKCR\ProgramName\shell\open\command. А для каждого расширения вносит указатель на этот раздел в HKCR\.ext, где ext - расширение.

ℹ️ В случае с файлами без расширения - раздел будет HKCR\.. По умолчанию он отсутствует. Более того, Windows не позволяет вам создать его путем "Открыть с помощью": для файлов без расширений нет опции всегда открывать этой программой! Однако вот пример связи таких файлов с блокнотом по описанной выше схеме старыми добрыми командами assoc и ftype.

assoc .=NoExtFile
ftype NoExtFile="notepad.exe" "%1"


В нашем случае автор вопроса в безуспешных попытках решить проблему удалил раздел HKCR\., тем самым уничтожив указатель на программу. А назвать свой подраздел в HKCR она могла как угодно. С помощью Process Monitor мы определили конкретное название раздела - HKCR\PhotonWorkShop. После его удаления проблема решилась ☑️

Но заодно создалась другая. Она не волновала ТС, хотя это скорее исключение. Теперь даже легитимно связанные с программой типы файлов в ней не откроются, потому что их расширения в реестре ссылаются на отсутствующий раздел. Кроме того, остался нераскрытым вопрос, почему даже после удаления раздела HKCR\. файлы без расширения продолжали открываться в этой программе 🤷‍♂️

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

Пользовательская регистрация расширений прописана в разделе
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\

Для каждого расширения там есть подразделы:
OpenWithList - список программ в "Открыть с помощью"
OpenWithProgids - список зарегистрированных программ или отсылка к типу файлов в HKCR
UserChoice - текущая программа по умолчанию, выбранная пользователем (при наличии - преобладает над подразделами выше)

✅ Отсюда следует решение вынесенного в заголовок вопроса.

🔹 Если вы желаете сменить одну зарегистрированную программу на другую, не нужно лезть в реестр. Это можно сделать из диалога "Открыть с помощью" (за исключением файлов без расширений).

🔹 Если вы хотите удалить пользовательские ассоциации и убрать указатели на них в "Открыть с помощью", зачищайте подразделы OpenWithProgids и OpenWithList в HKCU. В этом случае при открытии файла будут отображаться системные ассоциации ↓

🔹 Если требуется удалить системную связь программы с расширением, анализируйте раздел HKCR\.ext. Там тоже могут быть подразделы OpenWithProgids и OpenWithList. Универсального рецепта здесь нет ввиду различных способов регистрации.

У проблемной программы был еще один нюанс. После своего обновления она восстанавливала ассоциации файлов. В таком случае придется регулярно зачищать их скриптом. Альтернатива - отобрать разрешения на пользовательский раздел реестра по такой же схеме как с нежелательным значком OneDrive в панели навигации проводника ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🔍 Расследование: кто перезагрузил Windows

В чате участник A S. сообщил, что в Windows 11 политика NoAutoRebootWithLoggedOnUsers не предотвращает перезагрузку после установки обновлений. Статью про это я написал в 2018 году и с тех пор не перепроверял. Причем 4 года спустя эту политику наряду с другими объявили устаревшей и не поддерживаемой в Windows 11. И пообещали в будущем выпилить.

У ТС все подробности свелись к "отхожу на несколько часов". Обычно, так быстро сразу после установки обновлений перезагрузка не происходит. Стандартно - в 3 часа ночи, но дальше может в любой момент вне активных часов 🕒

Проще проверить всё самому, и я зарядил виртуалку. За несколько часов ничего не произошло, как и с утра. Однако ночью я сплю, и моя основная ОС тоже, т.е. ВМ в ней неактивны. Поэтому наутро я изменил часовой пояс ВМ и продолжил тест.

👉 Перезагрузка произошла! Но чтобы обвинить в ней обновление Windows, надо ответить на второй по важности вопрос всех времен и народов: какие ваши доказательства?

Они собраны в журнале событий, поэтому пост публикуется в рубрике "Гадание по логам" с помощью #PowerShell.

1️⃣ Смотрим время загрузки ОС - сразу после 3 часов ночи. Уже горячо!

(Get-CimInstance Win32_OperatingSystem).LastBootUpTime

Sunday, February 2, 2025 3:01:46 AM


2️⃣ Выясняем, какие процессы это вызвали - событие 1074 в журнале Система:

Get-WinEvent -FilterHashtable @{LogName='System'; Id=1074} | 
Select-Object TimeCreated, Message | Format-List

TimeCreated : 2/2/2025 3:00:03 AM
Message :
The process C:\WINDOWS\uus\AMD64\MoUsoCoreWorker.exe (DESKTOP-GQKOJ6B)
has initiated the restart of computer DESKTOP-GQKOJ6B on behalf of
user NT AUTHORITY\SYSTEM for the following reason:
Operating System: Service pack (Planned)
Reason Code: 0x80020010
Shutdown Type: restart.


3️⃣ Проверяем связь с планировщиком - поиском по части имени файла MoUsoCoreWorker. Время совпадает!

Get-ScheduledTask | where TaskName -match 'Uso' | Get-ScheduledTaskInfo

LastRunTime : 2/2/2025 3:00:05 AM
LastTaskResult : 2147942402
NextRunTime : 2/3/2025 10:48:35 PM
NumberOfMissedRuns : 0
TaskName : USO_UxBroker
TaskPath : \Microsoft\Windows\UpdateOrchestrator\


4️⃣ Но это еще не всё! Надо определить, был ли в это время выполнен вход пользователя в систему. Ведь политика должна предотвращать перезагрузку только в этом случае.

Здесь фильтруем события входа и выхода, затем ищем нужные по части SID - 1001 в конце у администраторов.

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624,4634,4647} | 
where message -match '1001' | Select-Object Id, TimeCreated, Message -First 15 |
ft -AutoSize

Id TimeCreated Message
-- ----------- -------
4634 2/2/2025 3:20:10 AM An account was logged off....
4624 2/2/2025 3:03:05 AM An account was successfully logged on....
4647 2/2/2025 3:00:05 AM User initiated logoff:...
4624 2/1/2025 11:33:32 PM An account was successfully logged on....

Событие 4647! Выход четко совпадает по времени с выполнением запланированного задания оркестратора. Указано, что пользователь инициировал выход, но это издержки регистрации в журналах. По факту он стал неактивен, не отреагировал вовремя на уведомление о перезагрузке, и его выход форсировали.

////

☑️ Итак, мы однозначно определили, что перезагрузку выполнил оркестратор обновлений, проигнорировав групповую политику и завершив пользовательский сеанс.

В Windows 10 политика NoAutoRebootWithLoggedOnUsers продолжает выполнять свою функцию. А в Windows 11 уже нет поддерживаемого способа предотвратить форсированный перезапуск после установки обновлений. Единственный обходной путь - ручное планирование перезагрузки, что позволяет отложить ее максимум на неделю ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

Бесплатно мигрируй в облако Serverspace 🔄

Мы поможем вам бесплатно мигрировать от другого провайдера и предложим скидку -30% на первый месяц!

VPS, GPU, S3, Удаленный рабочий стол и многое другое - уже в панели управления Serverspace!

▪️ Удобный калькулятор для расчёта стоимости
▪️ 9 дата-центров по миру
▪️ Безлимитный трафик
▪️ Поддержка 24/7

Сделаем переход в Serverspace комфортным:

1️⃣ Рассчитаем затраты и подберем оптимальную конфигурацию под ваш проект
2️⃣ Поможем перенести вашу инфраструктуру в облако бесплатно
3️⃣ Подарим -30% на месяц с промокодом VPS30

Миграция ещё никогда не была такой простой и выгодной!
📲 Начать переход

Erid

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

😎 PowerShell vs. CMD: запуск приложений с разным окружением

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

⌛️ Исторически они пользовались для запуска набором батников (пакетных файлов с расширением .bat), которые им написал добрый человек. Но почему-то лишь для одного приложения. Может, для второго не попросили, либо автор не осилил обновление на лету INI-файла с конфигурацией.

Я бы тоже не осилил, поэтому переписал все на #PowerShell :) Но батники для вызова скрипта оставил. Иначе у пользователя скрипт скорее не запустится, чем запустится 🤷‍♂️

powershell.exe -NoProfile -ExecutionPolicy Bypass -File script.ps1

Недавно в команду пришёл новый мальчик, попользовался скриптами и вскорости представил нам свое решение проблемы. Приложение-лончер с графическим интерфейсом, написанное на Java! 🌺

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

Я заинтересовался технической реализацией смены окружения, и молодой человек с готовностью продемонстрировал содержимое папки resources. А в ней лежат батники, которые он написал на основе моих скриптов PowerShell и вызывает из Java-приложения 😂

Выбор победителя в этой схватке #powershellvscmd я оставляю вам ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🔒 Каждый год все больше данных утекает в сеть. По оценкам экспертов, чаще всего сливают персональную информацию (76%), реквизиты платежных карт (12%) и учетки (11%). Поэтому бизнесу нужны крепкие спецы по информационной безопасности.

Станьте тем, за кем охотятся компании, после онлайн-магистратуры «Информационная безопасность» от Skillfactory и МИФИ. Это та же магистратура, что и в старом добром вузе, только онлайн. 

🧑‍🎓 Программа рассчитана на два года, после выдают диплом государственного образца НИЯУ МИФИ — одного из лучших университетов России.  В рамках обучения вы:

🔹Получите фундаментальные знания с фокусом на практику от преподавателей вуза и экспертов из VK и «Сбера».
🔹Отточите навыки в лабораториях и исследовательских центрах МИФИ.
🔹Поучаствуете в CTF-соревнованиях, хакатонах и стажировках. 
🔹Сможете пользоваться всеми бонусами очных студентов (отсрочка от армии, студенческий билет, обучение 198 р/месяц при господдержке).

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

Набор в магистратуру уже идет. Количество мест ограничено.
👉 Оставляйте заявку по ссылке

Реклама. ООО «Скилфэктори». ИНН 9702009530, erid: 2Vtzqw9awbT

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

▶️ О фильтрах по имени в командлетах Get-

Тут Павел Нагаев "решил упороться в шортсы" с ошибками новичков в #PowerShell (начало серии здесь). Там не совсем ошибки, а скорее неэффективные конструкции, которые можно найти у всех новичков. Потому что они так нагуглили или теперь ChatGPT им так написал.

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

Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -CNotLike '*Store*' -and $_.DisplayName -CNotLike '*Calc*' -and $_.DisplayName -CNotLike '*Notepad*'} | Remove-AppxProvisionedPackage -Online

Вообще, команда в таком виде попала в статью, будучи предложенной в комментариях читателем. Я скопировал и вставил, но ответственности с себя не снимаю :)

📢 Именно Павел подсказал мне, что код можно существенно сократить, задействовав вместо нескольких логических операторов -and один оператор -notmatch и регулярное выражение:

Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -notmatch 'store|calc|notepad'} | Remove-AppxProvisionedPackage -Online

Намного проще! Также замечу, что у Where-Object уже лет дцать поддерживается такой синтаксис:

Where-Object DisplayName -notmatch 'store|calc|notepad'

Ещё проще!

////

В своем видео Павел использовал для примера выборку служб командлетом Get-Service по первой букве названия службы.

Get-Service | Where-Object {$_.Name -match "^w|^t|^f"}

И тут настала моя очередь доставлять ему про неэффективность 😎 Если уж браться рассказывать про эффективные фильтры, надо начинать со встроенных фильтров командлетов Get-!

Get-Service -Name f*,t*,w*

Это - тоже выборка по первым буквам названий служб. Фокус в том, что по имени можно фильтровать без передачи по конвейеру на Where-Object.

🤝 Павел превратил мой фидбэк в короткое видео! https://www.youtube.com/shorts/9BUdqYLagnk

Отмечу, что параметр необязательно должен называться -Name. Недавно я показывал в канале анализ запланированных заданий. Вот пример с -TaskName:

Get-ScheduledTask -TaskName devi*,sync*

////

В PowerShell очень много командлетов Get- :

Get-Command -Name Get* -CommandType Cmdlet

Не все они располагают к фильтру по имени, но тут главное - знать приём ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🛡️ Автоматическое определение установщиков в UAC

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

ℹ️ Исполняемые файлы должны содержать манифест, где указаны требования к правам пользователя на запуск. Если там прописано requireAdministrator, вы не запустите программу без полных прав.

Манифест с highestAvailable породит запрос UAC у администраторов, но не у ограниченных пользователей. Однако такую программу можно запустить с обычными правами методом RunAsInvoker. #Классика блога в помощь: Зачем программам нужны установщики.

👉 Именно с установщиками и связано изменение UAC в Windows 10. Запрос появляется, когда манифест не содержит требования к правам, а имя исполняемого файла содержит: setup, install, update, patch!

Это работает только с 32-разрядными файлами, причем имя файла - не единственный триггер. Все критерии эвристики описаны в документации. Ссылка ведет на веб-архив 2017 года, потому что из текущей версии статьи это уже выпилено 🙄 В Windows 11 работает, разумеется.

📝 Заметка на полях: в обоих документах заявляют возможность смены часового пояса без прав администратора. Что в 2025 году нам выдают за новую фичу :)

Возвращаясь к UAC, это изменение идеально подходило бы для Windows 7. Для Vista жести и так хватало, а в 2015 году 64-разрядные программы уже пошли в массы. Впрочем, 32-разрядных и сейчас еще в немало. Легаси полно в корпоративной среде, ради которой это все и затевалось.

На видео фича в действии. Я взял первую попавшуюся 32-разрядную утилиту NirSoft, в которой манифест не диктует права на запуск ✌

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

▶️ Тонкая настройка защитника Windows с помошью PowerShell

В чате участник Demon спросил, почему защитник Windows удаляет файлы из папки, добавленной в исключения. Я запросил вывод PowerShell:

Get-MpThreat
Get-MpPreference | ft ExclusionPath

Первая команда показывает обнаруженные угрозы, а вторая - исключенные из мониторинга пути. Выяснилось, что исключена папка E:\Games, но удаленный файл лежал в одной из ее подпапок. Защитник определил его как HackTool:Win32/Crack.

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

ℹ️ В #PowerShell вы можете получить сведения о параметрах защитника командлетом Get-MpPreference. И есть еще два для установки параметров:

Add-MpPreference добавляет значения к существующему набору настроек.
Set-MpPreference задает свой набор настроек, перезаписывая текущий.

Оба поддерживают подстановочные символы * и ?. Но есть нюанс © У вас не получится добавить в исключения все дочерние папки рекурсивно так:

Add-MpPreference -ExclusionPath E:\Games\*

Это исключает только папки одного уровня вложенности. Два уровня - E:\Games\*\* и т.д. Поддерживается максимум 6 подстановочных символов. Подробнее смотрите в документации с примерами.

////

В рамках того же обсуждения Piter Pen посетовал, что защитник непоследовательно реагирует на различные угрозы. Одни отправляет в карантин, другие удаляет 🤷‍♂️

Мне кажется, что раньше в графическом интерфейсе были базовые настройки для действий в зависимости от серьезности угрозы. Возможно, их выпилили. Но это неважно, ведь есть PowerShell ♥️

Текущие настройки можно посмотреть так:

Get-MpPreference | Select-Object *action


HighThreatDefaultAction : 0
LowThreatDefaultAction : 0
ModerateThreatDefaultAction : 0
SevereThreatDefaultAction : 0
UnknownThreatDefaultAction : 0


Ноль означает действие по умолчанию в зависимости от предпочтений Microsoft, заданных сигнатурами. Это написано в справке Set-MpPreference.

Там же перечислены числовые значения для семи различных действий защитника. Например, 2 - карантин, 3 - удаление, 9 - игнорирование. Это помогает понять текущий уровень настроек.

Для каждого уровня серьезности угроз вы можете задать только эти три действия↑ (остальные применяются к конкретным экземплярам по их ИД). Например, вы хотите отправлять самые серьёзные угрозы в карантин вместо удаления:

Set-MpPreference -SevereThreatDefaultAction Quarantine


////

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

Консольные средства ставят хоть какой-то барьер от самострела. Заметьте, что здесь первый человек разрешал некий патч или кряк. А они традиционно служат самым распространенным транспортом для малвари. Второй же скорее интересовался с целью ослабить дефолтные настройки, нежели закрутить гайки ;)

В качестве завершающего аккорда здесь идеально подходит #классика блога О роли головного мозга в защите операционной системы ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

☁️ О папке C:\Windows\System32\%userprofile%

От создателей папки C:\inetpub :) Но это - другая история!

Когда я впервые обнаружил у себя эту папку, был немало удивлен. Внутри оказалась только пустая папка OneDrive. Идея понятна: %userprofile%\OneDrive - это стандартное расположение облачной папки. Но как она оказалась в системной? Подумал, что накосячили либо в Microsoft, либо я сам со скриптами. Однако я давно не использую батники, а в PowerShell переменная для пользовательского профиля другая: $env:userprofile.

💬 К исследованию вопроса я вернулся значительно позже, когда Alexandr Petnitsky в чате дал наводку. Якобы, папка появляется после перехода на установку OneDrive в Program Files. На паре моих систем все сходилось. Но я решил проверить на виртуалке. Поэтому сегодняшний пост публикуется в рубрике "доставка пруфов".

Для установки в Program Files достаточно одной команды. Однако после этого папка не появилась. И перезагрузка системы ничего не изменила 🤷‍♂️ Что ж, придется отлавливать всерьез. В блоге я рассказывал (причем на примере OneDrive!), как отследить запись запись в реестр с помощью аудита. Его можно также применять к объектам файловой системы (событие 4663). Но есть нюанс ©

⚙️ Поскольку папки нет, аудит приходится настраивать на уровне родительской папки. Соответственно, регистрируются все события доступа к дочерним объектам папки system32. И один только антивирус может легко заполонить журнал. Поэтому для длительного отслеживания может потребоваться увеличить размер журнала (по умолчанию ~20Mb). Также учитывайте, что аудит объектов файловой системы может негативно повлиять на производительность.

За несколько дней папка так и не появилась. И тогда я вспомнил про Дело об окнах командной строки при входе в систему. Там OneDrive для самообслуживания время от времени батники запускал. Я решил подождать и выключил ВМ на несколько дней.

✅ В итоге и папка создалась, и принадлежащий OneDrive процесс FileSyncConfig.exe попался в сети аудита. Причем на картинке видно, что доступ туда он осуществляет через день после создания папки. То есть это не разовая акция.

Для доступа в папку нужны права администратора, системы или TrustedInstaller, а размещенные в ней файлы не синхронизируются. И на том спасибо ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

⚙️ Как избавиться от предупреждения в проводнике при копировании файлов на диск, отформатированный в ext4

Этот вопрос задал в чате Юрий. Он переносил файлы на внешний диск с файловой системой ext4 и получал на каждый исполняемый файл такой запрос:

Вы действительно хотите переместить файл без его свойств?

Я сходу предложил использовать консольные средства. Например, в #PowerShell можно копировать файлы и папки командлетом Copy-Item. И это сработало! ☑️

Однако Юрий не желал каждый раз лезть в консоль. Мол, он регулярно копирует файлы с локального диска на внешний. Что ж, для регулярных задач синхронизации файлов в Windows испокон веков есть прекрасная утилита командной строки robocopy! ☑️

Но и это Юрия не устроило. И сторонние файловые менеджеры тоже отметались :) Он оказался маководом и хотел амазинга просто копировать в проводнике. Он также сообщил, что нагуглил в качестве решения утилиту NTFS Stream Explorer. Но опять же, в ней требовались ручные действия перед копированием.

////

ℹ️ Здесь в самый раз подходила #классика блога Альтернативные потоки данных NTFS. Юрий нашел в ней твик реестра, но тот не помог. Тогда все-таки пришлось читать, вникать, и вскоре мы увидели примерно такую картину. Я сохранил смысл, но в качестве примера взял свой файл из папки Downloads и сократил вывод до сути.

Get-Item -Path .\*keep*exe -Stream * | 
Select-Object pschildname,stream

PSChildName Stream
----------- ------
KeePass-2.57-Setup.exe::$DATA :$DATA
KeePass-2.57-Setup.exe:SmartScreen SmartScreen


Сразу прояснилось множество деталей:
1. Альтернативный поток NTFS пишет SmartScreen.
2. Исполняемый файл скачан в Microsoft Edge, что вытекает из п. 1.
3. Потока с идентификатором зоны нет. Он уже удален либо запись отключена политикой ↓
4. Твик с политикой "Не хранить сведения о зоне..." бессилен против п. 1.

Тут школьники посоветуют "отключить SmartScreen". Причем в такой формулировке неочевидно, что конкретно отключать. Однако снижение уровня безопасности (особенно у маковода :) - это не наш путь.

////

Избавиться от предупреждения в проводнике можно без твиков / политик и отключений функций безопасности. Мы знаем, что при загрузке в любом браузере файлы получают поток с идентификатором зоны. Кроме того, в Microsoft Edge к исполняемым файлам свой поток пишет SmartScreen.

✅ Решение укладывается в одну команду. В примере потоки от SmartScreen и диспетчера вложений удаляются из всех файлов в папке "Загрузки" рекурсивно. После чего проводник уже не суетится при их копирование на ext4.

Get-ChildItem -Path $env:USERPROFILE\downloads\ -File -Recurse | Remove-Item -Stream *SmartScreen*, *Zone.Identifier*

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

-NoProfile -Ex Bypass -Command "Get-ChildItem -Path $env:USERPROFILE\downloads\ -File -Recurse | Remove-Item -Stream *SmartScreen*, *Zone.Identifier*"

Скрытие консольных окон я разбирал четыре года назад, и с тех пор ничего не изменилось. ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

▶️ Как быстро искать по различным параметрам служб Windows
И не только служб. И не только в Windows!

В чате Николай посетовал :

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

В диспетчере задач Windows 11 есть приличный сквозной поиск по службам. Но отображаемого имени там нет. И многих прочих параметров тоже.

👉 Николаю сразу посоветовали #PowerShell - командлет Get-Service для получения сведений о службах. Однако ТС хотел графический интерфейс и отрицал этот способ. Тогда я добавил еще один командлет - Out-GridView:

Get-Service | Out-GridView


Это самый настоящий графический интерфейс! Здесь есть:
🔹 сквозной фильтр по всем параметрам
🔹 тонкие критерии фильтров
🔹 сортировка по столбцам

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

Get-Service | select * | Out-GridView


Дальше вы можете управлять набором столбцов в графическом интерфейсе. И да, их можно сразу перечислить в select.

🏷 Наконец, можно сделать ярлык на такую "оснастку".

////

Этот прием можно применять и к другим оснасткам. Именно так я ковыряюсь в дебрях планировщика Windows. Потому что динамическая фильтрация рулит!

Get-ScheduledTask | select * | Out-GridView


Продолжая пост про задания планировщика, вот список всех заданий с командами:
$tasklist = @()
Get-ScheduledTask | ForEach-Object {
$task = [xml](Export-ScheduledTask -TaskName $_.URI)
$taskdetails = New-Object -Type Psobject -Property @{
"Name" = $_.URI
"Action" = $task.Task.Actions.Exec.Command
}
$tasklist += $taskdetails
}
$tasklist | select Name,Action | Out-GridView


Разумеется, этот способ не ограничивается оснастками MMC и вообще ОС Windows. Применяйте командлет Out-GridView для анализа любых табличных наборов данных! ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🔓 О папке C:\inetpub

Обычно она создаётся при включении необязательных компонентов IIS (встроенные в Windows веб-сервер и FTP-сервер). Однако после апрельского накопительного обновления внимательные люди обнаружили папку в клиентских и серверных Windows даже при выключенных компонентах IIS.

Спустя пару дней популярные сетевые издания сообщили со слов Microsoft, что так и задумано, а удалять папку не следует вне зависимости от наличия включённого IIS. И действительно, 10 апреля в статью с описанием уязвимости CVE-2025-21204: Windows Process Activation Elevation of Privilege Vulnerability безопасники Microsoft добавили специальное примечание:

After installing the updates listed in the Security Updates table for your operating system, a new %systemdrive%\inetpub folder will be created on your device. This folder should not be deleted regardless of whether Internet Information Services (IIS) is active on the target device. This behavior is part of changes that increase protection and does not require any action from IT admins and end users.

ℹ️ Дело тут серьёзное. В соответствии со статьёй, используя изъян в стеке Windows Update, злоумышленник с локальным доступом может легко повысить свои привилегии с обычных до системных. Это называется Elevation of Privilege, EoP.

Слабость классифицируется как CWE-59: Improper Link Resolution Before File Access ('Link Following'). И это похоже на очередную уязвимость в обработке ярлыков Windows, т.е. файлов .LNK. Среди наиболее заметных уязвимостей LNK с EoP из прошлого: CVE-2010-2568 и CVE-2017-8464. Но они были куда опаснее тем, что позволяли удалённое повышение привилегий.

🤔 Казалось бы, предотвращение уязвимости путём создания папки выглядит несерьёзно. Но с одной стороны, Microsoft заявляет это лишь как одну из мер. А с другой - это может быть достаточным временным (надеюсь 🙂) решением до реализации более существенного исправления.

⚙️ Вероятно, уязвимость эксплуатируется путём создания файлов .LNK в C:\inetpub. После установки обновления (и при включении IIS, если на то пошло) для записи в папку и её удаления требуются права системы, TrustedInstaller или администратора.

То есть теперь злоумышленник с ограниченными правами не может ни создать в ней файлы для эксплуатации уязвимости, ни заменить её на свою папку. См. картинку.

////

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

🔹 Удалите апрельское накопительное обновление и установите его заново

🔹 Включите любой компонент IIS (это создаст папку) - клонируйте ACL во временную папку - выключите IIS и перезагрузитесь - создайте папку вручную - клонируйте ACL из временной папки. Разрешения будут не один к одному, но обычного пользователя ограничат.

Ещё можно попробовать дождаться следующего накопительного обновления. Однако я могу лишь предположить, что оно восстановит папку, но не гарантировать. Да и лучше не сидеть месяц с уязвимостью ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

💩 За кулисами создания г-сборки Windows (SE17E06)

Я регулярно поднимаю тему г-сборок в канале:
• затрагивал их экономику,
• разбирал "хорошие" г-сборки
• и относительно недавно заглядывал за кулисы

А тут не смог пройти мимо ещё одного повода, тем более не только у меня брови поднялись.

Есть известный в определённых кругах разработчик rgadguard, чьи полезные ресурсы неоднократно фигурировали у меня в блоге (тут) и канале (раз, два, три). Такие проекты приносят пользу сообществу, а разработчику - уважение и хорошую репутацию.

А еще он делает г-сборки 😎 Не удивлюсь, если в неофициальном рейтинге г-сборщиков он входит в топ. Внезапно в своем канале он сорвал покровы с интимного процесса изготовления. И там было такое... Орфография и пунктуация автора сохранены.

Операционная система - Windows Server 2022 Datacenter

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


Я не оспариваю тормоза проводника, они и без больших нагрузок есть 🤷‍♂️ Но в качестве препятствия для создания г-сборок это звучит очень странно.

Также проведены операции, как полностью отключения Defender (с помощью Defender Remover) и отключение автоматического обновления (с помощью WUMT).


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

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

⚙ Об изменениях в создании локальной учётной записи при установке Windows

В конце прошлой недели всплыли две новости.

1️⃣ Файл bypassnro.cmd выпилят из дистрибутива 25H2. Сам метод пока работать не перестанет, но вместо одной короткой команды для запуска файла придётся вводить две, которые в нём содержались. Это внесение изменений в реестр и перезагрузка.

2️⃣ Нашлась другая короткая команда, которая открывает диалог создания локальной учётной записи.

На первом экране OOBE нажмите Shift+F10, ткните в окно командной строки и введите:

start ms-cxh:localonly

Предположу, что это выпилят довольно быстро - может не дожить до 25H2. И напомню, что все это время неизменно рабочим способом остаётся файл ответов. Его можно применять:

🔹 с первого этапа установки
🔹 для автоматизации этапа OOBE

Учите матчасть ✌

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

😎 Сегодня у меня для вас рекомендации по автообрастаниям и автосхрюнку (или автохрюнку, это неточно :)

И не отрежьте там себе ничего автосхромкой! 🪚

Microsoft прогрессирует - переходит от ручного ухуренивания к автоухрюнку.

Это был #автоперевод в документации SQL Server ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🆘 О самостоятельной техподдержке в организации

Однажды в пятницу вечером мне написала коллега. Она уже полностью отчаялась решить проблему - её виртуальный десктоп Windows 365 завис при входе.

🤖 Сначала она долго пробивалась через чат-бота поддержки. Он сыпал бесполезными советами и отказывался звать человека.

Кожаные мешки в итоге оказались не лучше. Первый создал базовый инцидент, но уже второй закрыл его - якобы, вместо инцидента надо было создавать запрос (на самом деле - нет). Сам его создал, но повесил на неправильную группу. Та с лёгким сердцем его и закрыла 🤦‍♂️ Вообще, попадание тикета в нужные руки - это одна из нерешённых пока глобальных проблем человечества :)

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

Так прошло две недели 😱

У меня было два простых совета.

1️⃣ Создавать инциденты самостоятельно с помощью формы на портале, нежели через чат с ботом и затем с первой линией поддержки. Экономия времени значительная! Заодно в тикет идёт изложенная своими словами проблема, а не в пересказе туговатового сотрудника техподдержки, нанятого за 2 песо. Об этом написано в руководстве для сотрудников проекта, но кто ж его читает.

2️⃣ Перезагрузить виртуальный десктоп. Неважно, установлена Windows на физическом железе или на виртуальной машине - живительный ребут никто не отменял! Кстати, недавно случайно узнал, что некоторые коллеги не понимали значение слова reboot - слишком технический термин 🤷‍♂️

Но тут был интересный нюанс: как перезагрузить Windows, когда она висит на входе, а кнопки питания нет нигде? 🤔 Более того, эти десктопы в принципе настроены так, что из графического интерфейса Windows убраны все опции перезагрузки и выключения. И даже консольные блокируются за исключением одного - в PowerShell от администратора Restart-Computer. Но права админа просто так не дают.

👉 Однако облачные десктопы зачастую можно перезагрузить "снаружи". В данном случае нужно зайти на windows365.microsoft.com с аккаунтом организации. А там есть перезагрузка, откат к снимку системы и сброс. Это тоже было описано во внутреннем руководстве, кстати.

///

Вскорости после разговора коллега сообщила, что перезагрузка десктопа помогла, хотя и не сразу. Я не стал уточнять, что означала эта оговорка. Можно считать и сразу, когда за полчаса решаешь вопрос, с которым мучилась две недели ✅

Мораль вытекает из пунктов выше:
1. RTFM.
2. Перезагружайте Windows, прежде чем обратиться в техподдержку ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🚀 Ускорение загрузки файлов в PowerShell

Недавно я перепроверял давно опубликованный в блоге скрипт для скачивания файла с помощью #PowerShell, и слишком уж долго шла загрузка. Хочу поделиться решениями.

1️⃣ Отключение прогресса

$ProgressPreference = 'SilentlyContinue'

В принципе, эта переменная может слегка ускорить процесс и снизить нагрузку на ЦП не только при скачивании файлов. Но конкретно для командлета Invoke-WebRequest (псевдоним iwr) разница значительная! Один и тот же файл размером 175 мегабайт без прогресса у меня на разных системах скачивался от 16 до 42 секунд, а с прогрессом - от 3 до 13 минут! 🤔

У этого командлета проблема наблюдается только в Windows PowerShell 5.1, но не в PowerShell Core. Я писал об этом в канале 7 лет назад :) И недавно краем глаза где-то видел, что якобы в 5.1 уже починили. Мои тесты это не подтверждают.

2️⃣ Подстановка юзер-агента
На самом деле даже без прогресса у меня Invoke-WebRequest качал слишком долго. Я предположил, что сайт специально притормаживает отдачу, и решил прикинуться браузером.

-UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"

После этого скорость окончательно наладилась!

3️⃣ Загрузка с помощью BITS
В Windows помимо командлетов Invoke-WebRequest и Invoke-RestMethod также можно скачивать файлы с помощью Start-BitsTransfer. Этот командлет запускает джоб с помощью службы BITS (фоновая интеллектуальная служба передачи данных). Именно ее использует центр обновления Windows.

Это не совсем про ускорение, а про альтернативы. Но в моем случае был сайт Microsoft, и родную BITS он не тормозил в отличие от iwr без юзер-агента.

////

▶️ Скрипт для экспериментов:

$file = "$env:temp\mpam-fe.exe"
$uri = 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64'
$u = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
$ProgressPreference = 'SilentlyContinue'

Measure-Command {
Invoke-WebRequest -Uri $uri -OutFile $file -UserAgent $u
}
Measure-Command {
Start-BitsTransfer -Source $uri -Destination $file
}


Скрипт скачивает актуальный файл сигнатур защитника Windows с этой страницы. Но учтите, что для обновления сигнатур из консоли есть методы получше ✌️

Читать полностью…

Windows 11, 10, etc - Вадим Стеркин

🌐 О приоритете записей в файле hosts

В чате обсуждали использование файла hosts с целью запретить приложению подключение к своим адресам. Речь зашла о возможных дубликатах записей. Один опытный участник заявил:

hosts читается сверху вниз и будет использован последний дубликат

Другой не менее опытный участник это полайкал. Судя по результатам викторины в виде опроса, так думает лишь четверть подписчиков. Правильно же ответили более 40%, что для моих викторин - отличный результат 😎

Я поинтересовался у автора заявления, как бы он его проверял. Тот предложил вписать в файл две строчки и пропинговать.

127.0.0.1 ya.ru
127.0.0.2 ya.ru


Я бы тоже так делал! И вот результат:
gc "C:\Windows\System32\drivers\etc\hosts" -Tail 2; ping ya.ru
127.0.0.1 ya.ru
127.0.0.2 ya.ru

Pinging ya.ru [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128


👉 Получается, что Windows использует первый адрес. И Linux тоже!

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

📄 Несколько человек поднимали вопрос о влиянии кэша DNS. Однако в соответствии с одной из старейших актуальных статей базы знаний Microsoft, Microsoft TCP/IP Host Name Resolution Order, клиент Windows смотрит в локальный файл hosts прежде чем опрашивать серверы DNS. Кэш DNS в статье явно не упомянут, но это производная от серверов.

Сторонние же программы могут применять свой алгоритм чтения файла hosts либо вообще игнорировать его. Например, разработчикам Firefox пришлось реализовывать свой парсер hosts, чтобы он не игнорировался при использовании встроенного в браузер резолвера DoH (спасибо, dartraiden). А в Linux всегда найдется какой-нибудь дистрибутив с альтернативной реализацией 🐧

Я сам когда-то думал, что выигрывает последняя запись. Пока не столкнулся с этим по работе. У тестовых серверов поменялись IP-адреса, и я добавил новые записи в конец файла hosts. Однако рабочее приложение не смогло подключиться по доменному имени. Так и узнал ✌️

Читать полностью…
Подписаться на канал