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

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

На этой неделе стало понятно, как Microsoft планирует использовать загадочный Windows Feature Experience Pack, версия которого теперь красуется в сведениях о системе.

ℹ️ Этот пакет представляет собой компонент по требованию (Feature on Demand, FOD). Его не видно в Параметры - Приложения - Дополнительные компоненты. Однако он задокументирован, да и #PowerShell покажет:
Get-WindowsCapability -Name '*ShellCom*' -Online

В блоге инсайдерской программы сообщили о доставке новой версии компонента в канал Beta. Обновление в частности привнесло в оболочку нововведение: создав скриншот с Win+Shift+S, можно вставить файл в папку из буфера обмена, Ctrl+V.

Обновления пакета будут доставляться посредством Windows Update. Инсайдерам прислали отдельное обновление, нежели упаковали в накопительное исправление (cumulative update, CU).

👉 Мораль тут в том, что облочка #Windows10 будет получать нововведения не только при выходе новых версий, но и между ними. С одной стороны, надо приветствовать, что новые фичи или исправления косяков оболочки доставляются оперативно.

Как заметил в Твиттере Проничкин, это в первую очередь внутреннее изменение, а для конечных пользователей процесс прежний. Изменения и добавления функций ОС посредством CU - не новость, а здесь просто нюанс в виде дополнительного компонента.

Но у медали есть и обратная сторона 🤔 По каналу WU приходит множество исправлений - CU для системы и .NET, сервисный стек, необязательные драйверы и обновления BIOS, теперь еще Feature Experience Pack. Это затрудняет диагностику в случае проблем - ведь не всегда мы замечаем их моментально. Кроме того, становится сложнее отслеживать что нового появилось в ОС и когда именно.

Так или иначе, это - Windows as a Service, get used to it ✌️
​​▶️ Новое в блоге: Как определить, является файл компонентом Windows или просто выпущен Microsoft

Вечера в чате обсуждали работу OneDrive и возник вопрос, входит cldflt.sys в состав Windows 10 или устанавливается вместе с клиентом OneDrive. Можно посмотреть в WIM-образе, но допустим, что такой возможности у вас нет.

В принципе, на картинке все видно, но пост в канале не годится из-за объема кода для разных примеров.

➡️ Читайте в блоге: http://www.outsidethebox.ms/20631/
🌐 В Edge Canary вернулась группировка вкладок
https://t.me/win1leaks/2045

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

Сама по себе группировка вкладок не нова (привет, IE8), но в контексте вертикальных вкладок - это дополнительный челлендж UX.

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

А как вам вертикальные вкладки?
👍 - отлично!
🤔 - хотелось бы, но такой возможности нет
👀 - первый раз слышу
- мне это не нужно
​​▶️ Новое в блоге: #PowerShell: как извлечь список уникальных ссылок с веб-страницы

Возникла задача получить со страницы Confluence все ссылки, в URL которых была последовательность символов XYZ. Вручную – не вариант, потому что ссылок много.

Я в блоге показывал парсинг веб-страниц с командлетом PowerShell Invoke-WebRequest. Но тут пришлось бы возиться с авторизацией и двухфакторной аутентификацией, поэтому я решил сохранить HTML-страницу локально.

➡️ Читать в блоге: http://www.outsidethebox.ms/20645/
​​#️⃣ В Excel для инсайдеров Office 365 на прошлой неделе завезли крутую штуку. Теперь можно создавать свои функции на основе языка формул Excel (нежели JavaScript, например).

С помощью =LAMBDA можно:
- Оборачивать сложные формулы в свою функцию и вызывать ее из любой ячейки листа

- Вызывать свою функцию рекурсивно, т.е. свою функцию из этой же функции

👉 Подробности и примеры в блоге Excel.
▶️ Автоматическое открытие редактора реестра в нужном разделе

В форуме спросили, как из командной строки открыть regedit сразу с переходом в нужный раздел. На практике это не нужно с момента появления адресной строки в редакторе реестра #Windows10 1703 (сборка 14942). Но вопрос занятный.

В теме, конечно, посоветовали утилиты RegJump Руссиновича и nircmd Софера. А мне вспомнилась утилита JumpReg, которую создал на основе AutoIt один из участников OSZone с учетом пожеланий сообщества.

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

Например, скрипт #PowerShell:
param(
$Key=""
)
$regedit = Get-Process regedit -ErrorAction SilentlyContinue
if ($regedit) {
$regedit.CloseMainWindow()
Start-Sleep -Milliseconds 100
if (!$regedit.HasExited) {
$regedit | Stop-Process -Force
}
}
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name Lastkey -Value $Key -Type String -Force
Start-Process regedit
Remove-Variable regedit


и его запуск:
.\lastkey.ps1 -Key "HKEY_CURRENT_USER\Keyboard Layout\Preload"

В принципе, можно не проверять запущенный процесс и не пытаться его щадяще закрыть, заменив блок в середине на
Get-Process regedit | Stop-Process -Force
Но тогда будут ошибки в консоли ✌️
😂 Ц - целеустремленность!

И нет, это не издержки перевода. В оригинале: A current driver on your PC may be better than the driver we're trying to install. We'll keep trying to install.
👍 Сегодня у меня для вас #рекомендация - бот блога и канала @sterkin_ru_bot ;)

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

Вряд ли им кто-то пользуется, хотя создал его я почти 5 лет назад и даже анонсировал в статье блога про Telegram. Бот умеет выдавать:
🔹 Разделы блога (верхнее меню).
🔹 Подборки интересных тем блога (избранные мной метки).
🔹 Случайную статью блога из популярных. Раньше была ручная подборка, но сейчас я сделал выборку топ-100 по просмотрам за 2020 на основе Google Analytics.
🔹Случайный пост из этого канала (это я добавил на днях).

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

А вот статьи блога я поддерживаю в актуальном состоянии, и под каждой указаны поколения ОС Windows, к которым статья применима. В топе немало старых статей, причем описанные в них действия не особо-то и нужны (например, перенос папки Users или файла подкачки). Но раз уж люди берутся, то пусть делают грамотно 👌

Топ-5 по просмотрам в этом году:
1. 10 мифов Windows 10 LTSC, которые никогда не умрут
2. Нюансы отключения службы SysMain в Windows 10
3. 12 мифов об оптимизации SSD, которые никогда не умрут
4. Как бесплатно получить Windows 10 (вопросы и ответы)
5. Как грамотно переместить пользовательские папки на другой диск

Расклад понятен, надеюсь :)

👍 - о, нашлось что-то новенькое!
👌 - я все это знаю, но иногда залипаю
- архивы не читаю
▶️ Как проверить наличие значения в массиве и собрать все рабочие ссылки на посты канала Telegram

В #PowerShell легко проверить, есть ли в массиве конкретное значение:
$a = 1,2,3
$a.Contains(2) # содержит?
True
!$a.Contains(2) # не содержит?
False


Я не планировал так быстро возвращаться к теме парсинга веб-страниц, но для бота мне понадобилось собрать ссылки на все посты канала. Понятно, что они начинаются с https://t.me/sterkin_ru/1 и увеличиваются инкрементно. Но часть постов была удалена (неактуальность, ошибочный постинг), а битые ссылки не нужны.

Иду по ссылке в браузере и смотрю исходный код страницы. Если поста по ссылке нет, сервис t.me отдает описание канала. Сравниваю с исходным кодом любого поста и ищу отличия. В описании канала упомянут чат @winsiders, что в исходном коде выглядит как https://t.me/winsiders (этого, кстати, не происходит при таком упоминании чата в тексте поста).

Поэтому в данном случае достаточно выбрать страницы, где в массиве ссылок не содержится ссылка на чат. Дальше уже знакомый вам Invoke-WebRequest. К сожалению, при публикации в канал код некорректно обрабатывается поэтому ссылки на Pastebin и скрипт в архиве
¯\_(ツ)_/¯

950..955 - для примера на случай, если вы будете проверять:) На практике я использовал 1..999, т.к. последний на тот момент пост был за номером 999. Это - оператор range, попробуйте в консоли 1..5 | %{$_}

В итоге из 1000 ссылок по факту отсутствовали 10% ✌️
​​▶️ Как распарсить JSON и собрать все рабочие ссылки на посты канала Telegram

Мне тут сразу два человека доставили по поводу предыдущего поста 🙈

Василий Гусев пожурил за использование метода Contains, потому что он подходит только для массивов и вообще не задокументирован в справке #PowerShell, ибо .NET. Он посоветовал использовать операторы -contains и -notcontains.
$a = 2
$a -contains '2' # содержит?
True
$a -notcontains '2' # не содержит?
False


Соответственно, условие проверки будет таким (полный код по ссылке):
if ($c.links.href -notcontains 'https://t.me/winsiders')

👉 Также выяснилось, что для решения конкретной задачи, т.е. получения списка постов канала Telegram, есть более эффективный способ. Из описания любого канала можно экспортировать его историю в JSON (см. картинку).

Зная об этом, я бы конечно решал задачу без веб-запросов. Фрагмент структуры JSON:
{
"name": "Windows 10, etc - Вадим Стеркин",
"type": "public_channel",
"id": 9608710293,
"messages": [
{
"id": 1,
"type": "service",
"date": "2016-03-24T00:00:55",
...
},
{
"id": 22,
"type": "message",
"date": "2016-03-26T01:39:23",
"from": "Windows 10, etc - Вадим Стеркин",
"from_id": 9608710293,
"text": "Привет канал"
},


Мне нужны id постов с типом message. Получаю содержимое файла, конвертирую из JSON в объект, из которого дальше делаю выборку сообщений с нужным типом, затем перебор и запись в файл.
$j = Get-Content -Path "C:\temp\result.json" | ConvertFrom-Json
$j.messages | Where-Object {$_.type -eq 'message'} |
ForEach-Object {
$_.id | Out-File -Append C:\temp\urls.txt
}

Поскольку код в канале обрабатывается некорректно, в примере только вывод ID постов, а код с выводом ссылок на посты на Pastebin.
✌️
​​▶️ Новое в блоге: #PowerShell: как в #Windows10 быстро выявить дубликаты драйверов и удалить их

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

Я заинтересовался вопросом и применил свое руководство на практике. Помимо прочего мое внимание привлекло хранилище драйверов, занимающее 4GB. Сегодня я покажу, как автоматизировать анализ и очистку хранилища.

➡️ Читать в блоге: http://www.outsidethebox.ms/20667/
На этой неделе инсайдерам доставили новую версию приложения "Будильники и Часы" 10.2012.18.0 с обновленным дизайном на основе WinUI 2.4 (обзор на Community).

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

Если вы пользуетесь приложением, поддержите баг-репорт - он в канале для гиков фидбэка 👍

Если... У меня ему нет применения в #Windows10, да и полноценная работа невозможна на устройствах без поддержки Modern Standby. Уведомление не сработает, если система уйдет в сон ⚡️

Для короткого таймера сгодится, но я привык делать это голосом на смартфоне. Да, Кортана умеет, но ей не пользуюсь даже с английским интерфейсом.

Время для трех городов есть в часах в трее, да и просто в пуске можно набрать. Для будильников и таймеров мне удобнее смартфон. А вам?

👍 - пользуюсь приложением в Windows
📱- есть же смартфон
- только механика, только хардкор
​​▶️ Маленькая функция #PowerShell для преобразования кодов ошибок в понятный текст

На форум пришел человек с проблемой установки MS Office MSI. Коллеги запросили лог и увидели там:
Note: 1: 2203 2: C:\Windows\Installer\inprogressinstallinfo.ipi 3: -2147287037
Такие коды с отрицательным значением попадаются в ошибках приложений, журналах событий, логах Windows Installer и т.п.

У меня в профиле PowerShell ($profile) давно лежала функция Convert-Error для преобразования кодов ошибок с помощью утилиты certutil, я рассказывал про нее в блоге.

После публикации первой версии этого поста Вадимс Поданс доставил, что в функции лишняя конвертация в шестнадцатеричное значение, поскольку это встроено в PowerShell. Оптимальный вариант:
Function Convert-Error
([int]$Err)
{certutil -error $Err}


Вызывается так:
Convert-Error -2147287037

Результат на картинке↓ Windows Installer ожидал наличия папки %windir%\Installer, но ее не оказалось. Особо талантливый пользователь удалил за ненадобностью 🙉 После создания папки Office установился.

Применение функции не ограничивается кодами с отрицательным значением, попробуйте:
Convert-Error 0x80070005
Convert-Error 5

(Для чисел до 9999 по умолчанию предполагается префикс 0х8007)

Мне также доставили, что можно обойтись без certutil:
$iErrorCode = -2147287037
(New-Object -TypeName System.ComponentModel.Win32Exception($iErrorCode)).Message


Однако certutil универсальнее, поскольку умеет обрабатывать ошибки из других библиотек, например, wininet.dll. Если очень хочется без certutil, у Поданса есть и такой скрипт, но это уже above my paygrade ✌️
​​🔓 Сегодня в рубрике "Знаете ли вы?" временное отключение запросов UAC в предварительной версии Windows 7 (сборка 6608).

Напомню, что в Windows Vista все было жестко - если UAC включен, то запрос шел на каждое административное действие. Поэтому контроль учетных записей отключали практически все :)

В Windows 7 добавили два промежуточных уровня:
- автоматическое одобрение администраторам для элементов панели управления (значок с щитом)
- показ запроса UAC вне безопасного рабочего стола для слабых видеокарт

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

#Классика блога времен Windows 7 в тему: Так ли страшен контроль учетных записей?
✌️
📊 Опрос: ваши впечатления от канала

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

👉 Пройдите опрос!
====
Кстати, возвращаясь к напечатанному. Анонсируя Microsoft Forms, я предложил вам самостоятельно выявить практические отличия от Google Forms. Создавая этот опрос, я отметил пару моментов.

1. В отличие от Microsoft, у Google есть валидация ответов. Например, для вопросов с множественным выбором (флажки) можно ограничить количество выбранных вариантов или наоборот потребовать выбора не менее N пунктов.

2. В отличие от Google, у Microsoft есть формат Likert, с помощью которого в рамках одного вопроса можно получить мнение по каждому его пункту. У меня - это вопрос про интерес к темам канала.
Спасибо, что читаете мой канал 👍 С наступающим новым годом! 🎄 Продолжим в следующем году ✌️
​​📊 Итоги опроса читателей канала

Перед новым годом я попросил вас пройти опрос. Откликнулись 200 человек, спасибо вам большое! Я прикрепил расклад по первым семи вопросам.

Отмечу несколько моментов, которые меня удивили в той или иной степени:

🔹 Практически всех устраивает не более одного поста в день. И меня тоже. Лучше меньше, да лучше!

🔹 Мнение автора вызывает интерес у 88%. Спасибо :) Это оказалась четвертая по величине категория после трех основных технических направлений.

🔹 Новости как таковые интересуют менее половины читателей. Это радует, ибо канал не новостной. А вот своим мнением о новостях постараюсь делиться чаще.

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

🔹 Вело 🚴‍♀️ внезапно хотят видеть в канале 24%, при этом отрицают менее 40%. Я так и не начал писать обещанный еще летом большой пост про электровелосипеды ⚡️ Возможно, подкину какие-то моменты в канал.

🔹 Треть респондентов готова поддержать меня ежемесячной подпиской на Patreon. Это очень приятно, спасибо! Вообще, идея не моя, но мне ее подкидывали в чате не раз. Я подумаю :)

Помимо этого, 25 человек в свободной форме написали, о чем хотели бы читать в канале, и что в нем надо улучшить. Опрос был анонимный, но я счел необходимым ответить вам. Тут все-таки не центр отзывов Windows :)

👉 Подробные ответы я вчера опубликовал в чате, первый пост треда здесь https://t.me/winsiders/688597

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

Спасибо, что читаете мой канал ✌️
​​⚙️ Новое в блоге: diskusage vs. dfp: анализ занятого места на диске из командной строки

В предновогодних инсайдерских сборках #Windows10 20277 и 21277 появилась консольная утилита diskusage для анализа дискового пространства. Сегодня я разберу некоторые нюансы работы новой утилиты и поделюсь с вами результатами ее испытаний в сравнении с утилитой dfp.

Предвосхищая вопрос, diskusage работает и в предыдущих версиях Windows 10, если перекинуть в них исполняемый файл и MUI-ресурсы.

➡️ Читать в блоге: https://www.outsidethebox.ms/20709/
​​🧹 Как очистить историю в диалоговом окне Run (Выполнить)

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

Все проще - щелкните правой кнопкой мыши в адресной строке проводника и удалите журнал ✌️
Forwarded from Win1Leaks
Windows Central подготовили замечательный материал про грядущие масштабные изменения дизайна Windows 10 под кодовым названием "Sun Valley", а мы перевели его для вас.

Например, нынешнее меню "Пуск" останется по умолчанию, но будет доработано, а вот вариант из Windows 10X так же, вероятно, будет, но уже опционально.

Короче говоря, читаем статью, ибо там крайне много интересных подробностей.
​​🧹 Как быстро очистить историю списка переходов для конкретного приложения

Вопрос задали в чате @winsiders. Список переходов приложения отображается в:
- контекстном меню приложения на панели задач или в меню Пуск
- в результатах поиска меню Пуск (в правой панели)

Наглядного способа быстрой очистки списка не предусмотрено, можно удалять лишь отдельные элементы списка. Но есть несложный обходной путь.

1. Win+R - shell:Recent\AutomaticDestinations и отсортируйте файлы в папке по дате (новые сверху).
2. В списке переходов желаемого приложения удалите / открепите / закрепите любую запись.
3. Обновите папку из п. 1 (F5 в проводнике) и удалите самый новый файл.

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

👍 - о, что-то новенькое
👌 - я все это знаю