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

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

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

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

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

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

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

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

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

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

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

///

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

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

В чате 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 в панели навигации проводника ✌️
😎 Сегодня у меня для вас рекомендации по автообрастаниям и автосхрюнку (или автохрюнку, это неточно :)

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

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

Этот #автоперевод документации SQL Server прислал Romchik Alekseev ✌️
▶️ Простой и эффективный поиск текста в 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 и передает весь массив на поиск командлету Where-Object. А для такой задачи это неэффективно - слишком медленно!

Простое сравнение. Ищем ошибку '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 | where понадобилось 4 мин и 40 секунд.

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

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


////

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

🍪 Бонус - #классика канала про мониторинг логов в реальном времени при помощи:
• командлета PowerShell
• утилиты CMTrace
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Об изменениях в создании локальной учётной записи при установке Windows

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

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

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

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

start ms-cxh:localonly

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

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

Учите матчасть ✌️
☁️ 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 несколько попадающих под действие политики файлов и убедиться, что они получили особый статус и значок. В тултипе поясняется, что файл исключен из синхронизации ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Нюансы применения 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 весьма подробные, а их анализ - хорошее упражнение ✌️
🔓 О папке 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 из временной папки. Разрешения будут не один к одному, но обычного пользователя ограничат.

Ещё можно попробовать дождаться следующего накопительного обновления. Однако я могу лишь предположить, что оно восстановит папку, но не гарантировать. Да и лучше не сидеть месяц с уязвимостью ✌️
Опрос: применяете ли вы генеративный ИИ (ChatGPT, Midjourney и т.п.) для повышения продуктивности в своей работе или учебе?
Anonymous Poll
26%
Да, регулярно
21%
Да, иногда
14%
Да, редко
13%
Нет, но хотелось бы
14%
Нет, работа не подразумевает такого
7%
Нет, я отрицаю ИИ
4%
Моего варианта тут нет
▶️ Как быстро искать по различным параметрам служб Windows
И не только служб. И не только в Windows!

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

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

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

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

Get-Service | Out-GridView


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

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

Get-Service | Select-Object * | Out-GridView


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

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

////

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

Get-ScheduledTask | Select-Object * | 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-Object Name,Action | Out-GridView


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

И в Пуске оно тоже не находится. Этот вопрос задал мне подписчик Андрей К в контексте приложения Сообщения оператора (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! ✌️
⚙️ Как избавиться от предупреждения в проводнике при копировании файлов на диск, отформатированный в 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*"

Скрытие консольных окон я разбирал четыре года назад, и с тех пор ничего не изменилось. ✌️
🔐 О входе в учётную запись Microsoft без пароля

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

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

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

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

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

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

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

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

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

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

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

В оригинале же основная часть обращения Microsoft к клиентам была про ключи доступа. Что не новость, но посвежее беспарольного входа и тоже удобно на практике. И я напишу про них в ближайшее время. Тем более, что черновик записи уже был готов в качестве ответа на вопрос читателя. Не переключайте каналы ✌️
☁️ О папке 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, а размещенные в ней файлы не синхронизируются. И на том спасибо ✌️
Опрос: используете ли вы ключи доступа (passkeys), хранящиеся на компьютере, смартфоне или планшете, для входа в аккаунты Google, Microsoft, Samsung и других компаний? Этот вопрос НЕ про ключи на USB-токенах.
Final Results
20%
Да, есть ключи для 1-3 аккаунтов
10%
Да, есть ключи для 4 и более аккаунтов
9%
Не могу сказать с уверенностью
31%
Нет, и первый раз слышу
27%
Нет, и мне это не нужно
4%
Моего варианта тут нет
▶️ Тонкая настройка защитника 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


////

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

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

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

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

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

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

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

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

➡️ Читайте дальше в блоге: https://www.outsidethebox.ms/22646/#go
🛡️ Автоматическое определение установщиков в 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, в которой манифест не диктует права на запуск
2025/05/30 22:41:29
Back to Top
HTML Embed Code: