▶️ Как массово удалить папки, распакованные из архивов
В чате участник Павел задал такой вопрос:
В папке ~450 разных файлов, папок и архивов *.rar. Периодически рары разархивируются, и получается папка с тем же именем, что и rar. Стоит задача удалить эти папки, оставив при этом архивы. Как отсортировать, чтобы снизу папки сразу был её родительский архив?
Очевидно, он рассматривал вариант сортировки в файловом менеджере. Хотя надо сразу смотреть в сторону #PowerShell. Для начинающих это отличное практическое упражнение! Впрочем, этому унылому занятию Павел предпочел ожидание поста в канале 😎
Я бы решал задачу в лоб:
1. Отбираем только папки.
2. Для каждой проверяем наличие архива с таким же именем, "приклеивая" к имени папки расширение.
3. При совпадении удаляем.
Василий Гусев предложил нестандартное решение - группировка! 🤔 Мне оно в голову не пришло, хотя я трижды показывал
• поиск дубликатов драйверов
• выборка уникальных ссылок с веб-страниц
• замена дубликатов файлов на жесткие ссылки
Доработав идею, я получил такой конвейер:
1. Группируем по имени папки и файлы без расширения с помощью свойства
2. Отбираем группы, где с одинаковыми именами ровно два объекта - файл и папка!
3. Из каждой группы выбираем папки и удаляем их.
⌛️ Примечательно, что с обоими способами перекликается #классика блога Как массово переименовать файлы по маске в PowerShell. Там я склеивал имя файла из фрагментов, одним из которых было свойство
🤖 И неудивительно, что ChatGPT тоже задействовал это свойство, когда я поставил задачу перед ним. Он пошел тем же путем что и я, но выбрал перебор архивов нежели папок и создал побольше переменных. В свою очередь чат-бот Bing практически повторил мой способ. Но для определения папки он использовал старое свойство объекта
Короче, получив направление в PowerShell, Павел мог сразу спросить чат-бота. И не дожидаться, пока кожаный мешок опубликует решение его простенькой задачи в канале ✌️
В чате участник Павел задал такой вопрос:
В папке ~450 разных файлов, папок и архивов *.rar. Периодически рары разархивируются, и получается папка с тем же именем, что и rar. Стоит задача удалить эти папки, оставив при этом архивы. Как отсортировать, чтобы снизу папки сразу был её родительский архив?
Очевидно, он рассматривал вариант сортировки в файловом менеджере. Хотя надо сразу смотреть в сторону #PowerShell. Для начинающих это отличное практическое упражнение! Впрочем, этому унылому занятию Павел предпочел ожидание поста в канале 😎
Я бы решал задачу в лоб:
1. Отбираем только папки.
2. Для каждой проверяем наличие архива с таким же именем, "приклеивая" к имени папки расширение.
3. При совпадении удаляем.
$folders = Get-ChildItem -Path "C:\test" -Directory
foreach ($folder in $folders) {
if (Test-Path "$($folder.FullName).rar")
{Remove-Item $folder -Recurse -WhatIf}
}
Василий Гусев предложил нестандартное решение - группировка! 🤔 Мне оно в голову не пришло, хотя я трижды показывал
Group-Object
в блоге:• поиск дубликатов драйверов
• выборка уникальных ссылок с веб-страниц
• замена дубликатов файлов на жесткие ссылки
Доработав идею, я получил такой конвейер:
1. Группируем по имени папки и файлы без расширения с помощью свойства
BaseName
.2. Отбираем группы, где с одинаковыми именами ровно два объекта - файл и папка!
3. Из каждой группы выбираем папки и удаляем их.
Get-ChildItem -Path "C:\test" | Group-Object -Property BaseName |
Where-Object {$_.Count -eq '2'} | ForEach-Object {$_.group} |
Where-Object {$_.Attributes -eq 'Directory'} | Remove-Item -Recurse -WhatIf
⌛️ Примечательно, что с обоими способами перекликается #классика блога Как массово переименовать файлы по маске в PowerShell. Там я склеивал имя файла из фрагментов, одним из которых было свойство
BaseName
. 🤖 И неудивительно, что ChatGPT тоже задействовал это свойство, когда я поставил задачу перед ним. Он пошел тем же путем что и я, но выбрал перебор архивов нежели папок и создал побольше переменных. В свою очередь чат-бот Bing практически повторил мой способ. Но для определения папки он использовал старое свойство объекта
PSIsContainer
(параметр -Directory
у dir
доступен более 10 лет, с версии 3.0).Короче, получив направление в PowerShell, Павел мог сразу спросить чат-бота. И не дожидаться, пока кожаный мешок опубликует решение его простенькой задачи в канале ✌️
🔒 О ПИН-коде для удобства
Посмотрите на картинку↓ Это - варианты входа в Windows. Причем способы, относящиеся к Windows Hello, обозначены явно. Вроде все правильно, но есть нюанс © В левом верхнем углу написано, что вход выполнен с локальным аккаунтом. А в этом случае пометку "Windows Hello" с ПИН-кода следовало бы снять, потому что проверка подлинности работает иначе! 👈
Заметьте, что вход с паролем к Windows Hello не относится. Microsoft давно опубликовала статью Почему ПИН-код лучше пароля, хотя изначально в тексте пароль не имел приставки "онлайн". Там много говорится о преимуществах ПИН-кода над локальными паролями, но ни разу не упоминается локальный аккаунт.
👉 На самом деле при использовании локальной учетной записи ПИН-код служит для удобства. У Microsoft он так и называется - convenience PIN. Потому что процесс аутентификации отличается от учетной записи Microsoft (MSA) и аккаунтов Windows Hello for Business (WHfB).
ℹ️ Покровы срывает документ Common questions about Windows Hello for Business. Русский машинный перевод сойдет.
Удобный ПИН-код обеспечивает более простой способ входа в Windows, чем пароли, но он по-прежнему использует пароль для проверки подлинности. Если в Windows указан правильный удобный ПИН-код, сведения о пароле загружаются из кэша и проходят проверку подлинности пользователя.
⚙️ Не случайно, когда форсируется вход с Windows Hello, вариант входа с паролем пропадает и у локальных учетных записей, в том числе автологон. Это лишь в Параметрах написано, что Windows Hello требуется для MSA. А по факту настройка распространяется на всю систему.
Кстати, в том же документе Microsoft говорится, что технология WHfB не предназначена для работы с локальными учетными записями. И внезапно там же нашлось объяснение алгоритма, предотвращающего использование простых ПИН-кодов, о котором я писал в блоге.
В заключение, основная #классика блога по теме:
🔹 ПИН-код в Windows
🔹 Нюансы допустимых ПИН-кодов в Windows
🔹 Нюансы беспарольного входа в Windows
🔹 Как включить автоматический вход в Windows
Посмотрите на картинку↓ Это - варианты входа в Windows. Причем способы, относящиеся к Windows Hello, обозначены явно. Вроде все правильно, но есть нюанс © В левом верхнем углу написано, что вход выполнен с локальным аккаунтом. А в этом случае пометку "Windows Hello" с ПИН-кода следовало бы снять, потому что проверка подлинности работает иначе! 👈
Заметьте, что вход с паролем к Windows Hello не относится. Microsoft давно опубликовала статью Почему ПИН-код лучше пароля, хотя изначально в тексте пароль не имел приставки "онлайн". Там много говорится о преимуществах ПИН-кода над локальными паролями, но ни разу не упоминается локальный аккаунт.
👉 На самом деле при использовании локальной учетной записи ПИН-код служит для удобства. У Microsoft он так и называется - convenience PIN. Потому что процесс аутентификации отличается от учетной записи Microsoft (MSA) и аккаунтов Windows Hello for Business (WHfB).
ℹ️ Покровы срывает документ Common questions about Windows Hello for Business. Русский машинный перевод сойдет.
Удобный ПИН-код обеспечивает более простой способ входа в Windows, чем пароли, но он по-прежнему использует пароль для проверки подлинности. Если в Windows указан правильный удобный ПИН-код, сведения о пароле загружаются из кэша и проходят проверку подлинности пользователя.
⚙️ Не случайно, когда форсируется вход с Windows Hello, вариант входа с паролем пропадает и у локальных учетных записей, в том числе автологон. Это лишь в Параметрах написано, что Windows Hello требуется для MSA. А по факту настройка распространяется на всю систему.
Кстати, в том же документе Microsoft говорится, что технология WHfB не предназначена для работы с локальными учетными записями. И внезапно там же нашлось объяснение алгоритма, предотвращающего использование простых ПИН-кодов, о котором я писал в блоге.
В заключение, основная #классика блога по теме:
🔹 ПИН-код в Windows
🔹 Нюансы допустимых ПИН-кодов в Windows
🔹 Нюансы беспарольного входа в Windows
🔹 Как включить автоматический вход в Windows
⚙️ Диагностика проблемы с созданием файлов загрузки в разметке GPT
Сегодня в рубрике "Возвращаясь к напечатанному" #классика блога про восстановление загрузки в разметке GPT. В тот раз, получив ошибку
Недавно в чат поддержки пришёл человек с проблемой загрузки. У него был подключен только один диск. Но даже после пересоздания раздела EFI команда завершалась ошибкой Сбой при копировании файлов загрузки.
👉 На такой случай у
Утилита же не берет файлы из воздуха. Для создания конфигурации загрузки она используют в качестве источника оффлайн систему. В папке
Впрочем, это не решило исходную проблему, потому что в ОС не оказалась множества других ключевых файлов. Но это уже другая история ✌️
Сегодня в рубрике "Возвращаясь к напечатанному" #классика блога про восстановление загрузки в разметке GPT. В тот раз, получив ошибку
bcdboot
при создании загрузки, я зрительно определил помеху - "лишний" раздел EFI на другом диске. Но не всегда причина очевидна.Недавно в чат поддержки пришёл человек с проблемой загрузки. У него был подключен только один диск. Но даже после пересоздания раздела EFI команда завершалась ошибкой Сбой при копировании файлов загрузки.
👉 На такой случай у
bcdboot
есть ключ -v
, выводящий подробный ход операции. И сразу стало видно, что не найден файл c:\Windows\Boot\PCAT\bootmgr
↓ Утилита же не берет файлы из воздуха. Для создания конфигурации загрузки она используют в качестве источника оффлайн систему. В папке
PCAT
также не было еще нескольких файлов. Когда их скопировали с другой системы, bcdboot
отработала как положено.Впрочем, это не решило исходную проблему, потому что в ОС не оказалась множества других ключевых файлов. Но это уже другая история ✌️
⚙️ О развитии утилиты
Сегодня в рубрике "Возвращаясь к напечатанному" утилита для анализа дискового пространства, входящая в поставку Windows 11. Три года назад я публиковал в блоге подробный разбор ключевых функций.
На тот момент утилита только появилась в предварительных сборках, и у меня был ряд нареканий. С тех пор основные недочеты устранили. Давайте пройдемся по улучшениям!
⚙️ Определение размера системных файлов
На смену ключу
•
•
Ключ
Результат команды на картинке↓ В отчет входят служебные файлы NTFS, включая
Этот ключ также закрыл вопрос с теневыми копиями, которые утилита изначально могла отображать только при запуске от имени системы. Пути вида
Да, хотелось бы видеть папку
⚙️ Определение объема зарезервированного пространства
Ключ
У меня в одной из систем объем зарезервированного пространства по сведениям утилиты отличается от цифры в параметрах на 1.5 GB. При этом он почти совпадает с объёмом первой из трёх зарезервированных областей:
В остальных тестовых системах вывод в целом соответствует значению в параметрах. Да и так известно, что резервируется около 7 GB. Но такие разночтения не повышают доверие к результатам.
🔗 Переход по символическим ссылкам и соединениям
Изначально это было поведением по умолчанию, а выключалось оно ключом
Действительно, впоследствии стали игнорировать символические ссылки и соединения, для явного перехода по ним добавили ключ
📃 Изменения в синтаксисе
Для указания значений перешли от знака равно к двоеточию. Было
Все ключи: было | стало.
////
Я стараюсь поддерживать все материалы блога в актуальном состоянии. Вот и на сей раз #классика блога обновлена.
И да, я знаю, о чем вы сейчас думаете: "Зачем все это, если есть TreeSize, WinDirStat, Scanner и т.д." 🤔
Однако у встроенной консольной утилиты есть два неоспоримых преимущества:
🔹 работа в огороженной системе, где нельзя просто взять и скачать стороннее ПО
🔹 дистанционная помощь без лишних телодвижений: "выполни команду - покажи результат"
diskusage
Сегодня в рубрике "Возвращаясь к напечатанному" утилита для анализа дискового пространства, входящая в поставку Windows 11. Три года назад я публиковал в блоге подробный разбор ключевых функций.
На тот момент утилита только появилась в предварительных сборках, и у меня был ряд нареканий. С тех пор основные недочеты устранили. Давайте пройдемся по улучшениям!
⚙️ Определение размера системных файлов
На смену ключу
/systemAndReserve
пришли два: •
/systemFile[:N]
для отображения служебных системных файлов•
/reserved
для зарезервированного пространстваКлюч
/systemFile[:N]
отображает системные файлы, которые обычно не видны в файловых менеджерах:diskusage /systemFile:15 /humanReadable
Результат команды на картинке↓ В отчет входят служебные файлы NTFS, включая
$MFT
и $UsnJrnl
. В целом очень похоже на вывод: fsutil volume allocationreport C:
Этот ключ также закрыл вопрос с теневыми копиями, которые утилита изначально могла отображать только при запуске от имени системы. Пути вида
C:\{GUID}{GUID}
— это теневые копии. Вроде, это первая комплектная утилита, которая показывает размер отдельных теней.Да, хотелось бы видеть папку
System Volume Information
в рамках вывода самых больших папок, /TopDirectory[:N]
. Но и на том спасибо 👌⚙️ Определение объема зарезервированного пространства
Ключ
/reserved
, как и его предшественник, не срабатывает в сочетании с [некоторыми] другими. Если смотреть отдельно, быстрее всего натравить утилиту на пустую папку:diskusage C:\new /reserved /humanReadable
У меня в одной из систем объем зарезервированного пространства по сведениям утилиты отличается от цифры в параметрах на 1.5 GB. При этом он почти совпадает с объёмом первой из трёх зарезервированных областей:
fsutil storagereserve query C:
В остальных тестовых системах вывод в целом соответствует значению в параметрах. Да и так известно, что резервируется около 7 GB. Но такие разночтения не повышают доверие к результатам.
🔗 Переход по символическим ссылкам и соединениям
Изначально это было поведением по умолчанию, а выключалось оно ключом
/skipReparse
. Я отметил, что логично было сделать наоборот. Действительно, впоследствии стали игнорировать символические ссылки и соединения, для явного перехода по ним добавили ключ
/reparse
, а ключ /skipReparse
убрали из справки.📃 Изменения в синтаксисе
Для указания значений перешли от знака равно к двоеточию. Было
/TopDirectory=25
, стало /TopDirectory:25
. Впрочем, старый синтаксис пока тоже работает.Все ключи: было | стало.
////
Я стараюсь поддерживать все материалы блога в актуальном состоянии. Вот и на сей раз #классика блога обновлена.
И да, я знаю, о чем вы сейчас думаете: "Зачем все это, если есть TreeSize, WinDirStat, Scanner и т.д." 🤔
Однако у встроенной консольной утилиты есть два неоспоримых преимущества:
🔹 работа в огороженной системе, где нельзя просто взять и скачать стороннее ПО
🔹 дистанционная помощь без лишних телодвижений: "выполни команду - покажи результат"
❄️ TechNet Wiki - в архиве документации!
11 лет назад на MVP Open Days💨 нас зазывали в авторы новоиспеченной TechNet Wiki под соусом “Пишите, и о вас узнает весь мир!”. На вопрос, как этому помогут фактически обезличенные записи, последовал незамысловатый ответ: “Ваши материалы будут на сайте Microsoft! И вообще, индусы и китайцы с радостью!”
👉 Архив https://learn.microsoft.com/en-us/archive/technet-wiki/
Спасибо за наводку Вадимсу Подансу - говорит, там было что-то годное про PKI.
Архив не индексируется поисковиками, а внутренний поиск еще совсем недавно был сломан примерно год. Но не уничтожили, и на том спасибо!
#Классика блога и канала по теме:
🔹 Сохраняем исчезающие блоги Microsoft MSDN и TechNet
🔹 Как найти исчезнувшие статьи базы знаний Microsoft
🔹 Архив видео Channel 9
11 лет назад на MVP Open Days
👉 Архив https://learn.microsoft.com/en-us/archive/technet-wiki/
Спасибо за наводку Вадимсу Подансу - говорит, там было что-то годное про PKI.
Архив не индексируется поисковиками, а внутренний поиск еще совсем недавно был сломан примерно год. Но не уничтожили, и на том спасибо!
#Классика блога и канала по теме:
🔹 Сохраняем исчезающие блоги Microsoft MSDN и TechNet
🔹 Как найти исчезнувшие статьи базы знаний Microsoft
🔹 Архив видео Channel 9
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ winget: исключение приложений из массового обновления
Сегодня в рубрике "Возвращаясь к напечатанному" команда
Документация имеется, но ввиду ее автоматического перевода на русский язык прокомментирую три варианта исключений тут.
🔹 Закрепление
Вместо имени пакета можно использовать
🔹 Блокировка
В этом случае обновление пакета (отдельно или массово) возможно лишь с ключом
🔹 Диапазон версий
Здесь все версии
Наконец, можно посмотреть все исключения:
А также массово сбросить их:
#Классика блога обновлена. Но помимо команды
Сегодня в рубрике "Возвращаясь к напечатанному" команда
pin
менеджера пакетов winget. Разбирая нюансы автоматического обновления приложений осенью 2022 года, я сетовал на отсутствие такой фичи в winget. Ее добавили летом 2023 года в качестве отдельной команды.Документация имеется, но ввиду ее автоматического перевода на русский язык прокомментирую три варианта исключений тут.
🔹 Закрепление
winget pin add powertoys
Вместо имени пакета можно использовать
--id
. Команда исключает приложения из обновления командой winget upgrade --all
, но позволяет включить их разово ключом --include-pinned
. Также работает обновление отдельного пакета: winget upgrade powertoys
.🔹 Блокировка
winget pin add powertoys --blocking
В этом случае обновление пакета (отдельно или массово) возможно лишь с ключом
--force
либо после снятия закрепления: winget pin remove powertoys
🔹 Диапазон версий
winget pin add --id powertoys --version 0.70.*
Здесь все версии
0.70.ххх
не будут обновляться. Обход ключом --force
.Наконец, можно посмотреть все исключения:
winget pin list
А также массово сбросить их:
winget pin reset --force
#Классика блога обновлена. Но помимо команды
pin
есть и другие улучшения. В ближайшее время я еще раз обновлю статью и расскажу об этом в канале ✌️⚙️ Облачная переустановка поверх в параметрах Windows 11
Осенью 2019 года в Windows появилась функция облачного сброса. Тогда я доставил ПМу, что куда полезнее была бы функция переустановки поверх, которая сохраняет программы и настройки в отличие от сброса.
По его просьбе я отправил развёрнутые аргументы в центр отзывов, и ныне удаленное предложение набрало более 100 голосов 👍 Это очень много для такой технической функции. На русском языке я озвучил тезисы в канале. Прочтите их, чтобы прочувствовать важность фичи!
🎉 И спустя 4.5 года в параметрах появилась облачная переустановка поверх!
Фичу доставили в рамках обновления Moment 5. Она описана в статье базы знаний KB5036436. Помимо прочего там:
• отмечается, что в центре обновления может появиться предложение выполнить облачную переустановку в случае неудачной установки исправлений
• приводится список условий и групповых политик, при наличии которых функция недоступна
🔄 Прогресс загрузки установочных файлов и ход установки отображаются в центре обновления. В целом - это стандартный процесс переустановки поверх, хотя и без присущих ему экранов. Кстати, в РФ фича обретает дополнительную ценность на фоне препятствий загрузке MCT и ISO.
Но есть и ложка дегтя 🤷♂️ Поскольку процесс завязан на Windows Update, неподдерживаемые конфигурации блокируются. И не прокатит обходной путь AllowUpgradesWithUnsupportedTPMOrCPU, т.к. он для установки с флэшки.
Так или иначе, фича ценная, и новость отличная! #Классика блога про переустановку поверх обновлена ✌️
Осенью 2019 года в Windows появилась функция облачного сброса. Тогда я доставил ПМу, что куда полезнее была бы функция переустановки поверх, которая сохраняет программы и настройки в отличие от сброса.
По его просьбе я отправил развёрнутые аргументы в центр отзывов, и ныне удаленное предложение набрало более 100 голосов 👍 Это очень много для такой технической функции. На русском языке я озвучил тезисы в канале. Прочтите их, чтобы прочувствовать важность фичи!
🎉 И спустя 4.5 года в параметрах появилась облачная переустановка поверх!
Фичу доставили в рамках обновления Moment 5. Она описана в статье базы знаний KB5036436. Помимо прочего там:
• отмечается, что в центре обновления может появиться предложение выполнить облачную переустановку в случае неудачной установки исправлений
• приводится список условий и групповых политик, при наличии которых функция недоступна
🔄 Прогресс загрузки установочных файлов и ход установки отображаются в центре обновления. В целом - это стандартный процесс переустановки поверх, хотя и без присущих ему экранов. Кстати, в РФ фича обретает дополнительную ценность на фоне препятствий загрузке MCT и ISO.
Но есть и ложка дегтя 🤷♂️ Поскольку процесс завязан на Windows Update, неподдерживаемые конфигурации блокируются. И не прокатит обходной путь AllowUpgradesWithUnsupportedTPMOrCPU, т.к. он для установки с флэшки.
Так или иначе, фича ценная, и новость отличная! #Классика блога про переустановку поверх обновлена ✌️
Казалось, Холмс совсем отошел от дел. Он строго-настрого наказал миссис Хадсон отправлять всех визитеров в Скотланд-Ярд. А сам предавался курению трубки, игре на скрипке и своему новому увлечению — поездкам по вечернему Лондону на электрическом велосипеде. Однако в то утро посетители оказались исключительно настойчивыми.
Выйдя на шум, мы столкнулись с запыхавшейся миссис Хадсон: «Мистер Холмс, эти джентльмены заявляют, что никуда не уйдут, пока не получат вашу аудиенцию. Они уверены, что вы их примете. Не могу же я поселить их внизу!». Понизив голос, она доверительно добавила: «Они в штатском, но думаю, что это военные».
Холмс незаметно посмотрел сверху на посетителей и, кажется, узнал одного из них: «Что ж, пригласите их ко мне».
Читайте продолжение:
https://boosty.to/sterkin/posts/dc8a99a5-e05b-42f3-9b75-a23f976af067
///
Да, Холмс возвращается после 8-летнего перерыва! Эта детективная история написана специально для фанатов серии и всех кому действительно интересно мое творчество 🖊
У меня в Boosty немного платных подписчиков, поэтому скучно ограничивать рассказ для широкой аудитории столь узким кругом. Вы можете прочесть этот детектив не только по подписке, но и просто поддержав меня разовым взносом 🤝
Если у вас нет возможности или желания это делать, вся #классика блога доступна без ограничений https://www.outsidethebox.ms/tag/sherlock-holmes/
Приятного чтения✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
🏃♂️ Запуск программ от имени администратора из диалога Run (Выполнить)
Вопрос из форума. Срыва покровов тут нет, но всегда найдутся те, кто не в курсе новинок 6- и 15-летней давности :)
👉
Разумеется, запрос UAC появится. Это #классика канала, см. здесь контекст и дополнительное ускорение. Жаль, что в адресную строку проводника это не прикрутили. Ведь там текущий путь передается в консоль.
ТС однако ответ не устроил, ибо не работает в 1607 🤦♂️ Что ж, можно и поглубже копнуть. Есть классика времен в Windows 7 - запуск из планировщика, причем без запроса UAC! Поскольку ссылка не у всех откроется где надо, скопирую суть сюда.
🕑 В планировщике создаётся задание:
И запускается:
Для этой команды можно сделать ярлык, закрепить на панели задач и/или повесить на него сочетание клавиш.
▶️ Вне диалога "Выполнить" для отдельных приложений запуск с полными правами можно форсировать так:
🔹 В свойствах EXE на вкладке "Совместимость" или в свойствах ярлыка - "Дополнительно" поставить флажок "Запускать от имени администратора".
🔹 Задействовать в #PowerShell командлет
Разумеется, для этой цели есть и другие встроенные способы (да хоть VBS с тем же глаголом), а также куча сторонних утилит.
#Классика блога в тему:
🔸 Как выполнять задачи с полными правами обычным пользователем без ввода пароля администратора
🔸 Как выполнять команды и скрипты от имени системы средствами Windows
🔸 Как выполнять скрипты с правами TrustedInstaller без сторонних утилит
Вопрос из форума. Срыва покровов тут нет, но всегда найдутся те, кто не в курсе новинок 6- и 15-летней давности :)
👉
Ctrl + Shift + Enter
!Разумеется, запрос UAC появится. Это #классика канала, см. здесь контекст и дополнительное ускорение. Жаль, что в адресную строку проводника это не прикрутили. Ведь там текущий путь передается в консоль.
ТС однако ответ не устроил, ибо не работает в 1607 🤦♂️ Что ж, можно и поглубже копнуть. Есть классика времен в Windows 7 - запуск из планировщика, причем без запроса UAC! Поскольку ссылка не у всех откроется где надо, скопирую суть сюда.
🕑 В планировщике создаётся задание:
schtasks /Create /RL Highest /TN Run /SC ONCE /ST 14:00 /TR "cmd.exe /c start %WINDIR%\SysWOW64\rundll32.exe shell32.dll,#61"
И запускается:
schtasks /run /tn Run
Для этой команды можно сделать ярлык, закрепить на панели задач и/или повесить на него сочетание клавиш.
▶️ Вне диалога "Выполнить" для отдельных приложений запуск с полными правами можно форсировать так:
🔹 В свойствах EXE на вкладке "Совместимость" или в свойствах ярлыка - "Дополнительно" поставить флажок "Запускать от имени администратора".
🔹 Задействовать в #PowerShell командлет
Start-Process
и его глагол RunAs
: powershell -ex bypass -command Start-Process notepad -Verb RunAs
Разумеется, для этой цели есть и другие встроенные способы (да хоть VBS с тем же глаголом), а также куча сторонних утилит.
#Классика блога в тему:
🔸 Как выполнять задачи с полными правами обычным пользователем без ввода пароля администратора
🔸 Как выполнять команды и скрипты от имени системы средствами Windows
🔸 Как выполнять скрипты с правами TrustedInstaller без сторонних утилит
✔️ Как сверить контрольную сумму дистрибутива Windows с первоисточником
Технически контрольная сумма нужна, чтобы убедиться в целостности скачанного ISO. Но сначала его нужно найти. Для чего как раз идеально подходит контрольная сумма 😎
Контрольные суммы ISO есть в каждой торрент-раздаче - это для доверчивых. Более придирчивые смотрят в https://msdn.rg-adguard.net/. В идеале же надо сверять с первоисточником - Microsoft.
Когда-то контрольные суммы были в свободном доступе на сайте MSDN. Но их спрятали за подпиской в 2017 году одновременно с переездом на домен VisualStudio. Однако в какой-то момент публичный доступ вернули. Требуется лишь вход с учетной записью Microsoft. Спасибо
⏺ Процесс показан на видео. Пример ссылки:
https://my.visualstudio.com/Downloads?q=Windows%2011
Выбрать утилиту для сверки вам поможет #классика блога: Как проверить контрольную сумму дистрибутива Windows ✌️
Технически контрольная сумма нужна, чтобы убедиться в целостности скачанного ISO. Но сначала его нужно найти. Для чего как раз идеально подходит контрольная сумма 😎
Контрольные суммы ISO есть в каждой торрент-раздаче - это для доверчивых. Более придирчивые смотрят в https://msdn.rg-adguard.net/. В идеале же надо сверять с первоисточником - Microsoft.
Когда-то контрольные суммы были в свободном доступе на сайте MSDN. Но их спрятали за подпиской в 2017 году одновременно с переездом на домен VisualStudio. Однако в какой-то момент публичный доступ вернули. Требуется лишь вход с учетной записью Microsoft. Спасибо
ԤИОНЕР
за наводку!⏺ Процесс показан на видео. Пример ссылки:
https://my.visualstudio.com/Downloads?q=Windows%2011
Выбрать утилиту для сверки вам поможет #классика блога: Как проверить контрольную сумму дистрибутива Windows ✌️
⚙️ Как быстро восстановить разрешения на файл или папку
Недавно в чат поддержки пришел человек, который собственноручно сломал разрешения файла
Зато у меня появился повод показать один из моих любимых примеров мощи конвейеров в #PowerShell. От имени администратора:
В оригинале была одна команда, но так нагляднее. Перейдя в папку с файлами, берем список контроля доступа (ACL) у соседнего файла
ℹ️ Параметр
Проблему автора вопроса это решило, но ничему не научило. Уже через 5 минут он спросил, как изменить владельца родительской папки
Вообще, правка разрешений нужна крайне редко. А для внесения изменений в файлы или реестр она фактически не требуется. На такой случай у меня есть отличная #классика блога с быстрым и грамотным способом выполнения операций с правами SYSTEM и TrustedInstaller ✌️
Недавно в чат поддержки пришел человек, который собственноручно сломал разрешения файла
hosts
. Он творил полную дичь - пытался сделать этот файл только для чтения, чтобы не слетел некий кряк 🤦♂️Зато у меня появился повод показать один из моих любимых примеров мощи конвейеров в #PowerShell. От имени администратора:
cd C:\Windows\System32\drivers\etc
Get-Acl networks | Set-Acl hosts
В оригинале была одна команда, но так нагляднее. Перейдя в папку с файлами, берем список контроля доступа (ACL) у соседнего файла
networks
и применяем его к поврежденному hosts
. Это всё! Восстанавливаются разрешения на объект файловой системы и его владелец.ℹ️ Параметр
-Path
для пути к файлу я опустил. У этих командлетов он первый позиционный, т.е. подразумевается, если не указан. Такие вещи описаны в справке.Проблему автора вопроса это решило, но ничему не научило. Уже через 5 минут он спросил, как изменить владельца родительской папки
etc
. Потому что не получалось сохранить измененный файл hosts
🤦♂️🤦♂️ В его инструкциях же не уточнялось, что текстовый редактор надо запускать от админа...Вообще, правка разрешений нужна крайне редко. А для внесения изменений в файлы или реестр она фактически не требуется. На такой случай у меня есть отличная #классика блога с быстрым и грамотным способом выполнения операций с правами SYSTEM и TrustedInstaller ✌️
⚙️ Установка Windows 11 с локальной учетной записью
👉 С учетом изменений в версии 24H2
Интернет и учетная запись Microsoft (MSA) теперь заложены в официальные системные требования Windows. В домашнее издание Windows 11 - с версии 21H2, а в профессиональное - с 22H2 (сборка 22557). Первую попытку форсировать это компания сделала еще в Windows 10 1903.
Я пользуюсь MSA, но всегда выполняю установку с локальным аккаунтом, чтобы контролировать имя профиля.
✅ Рабочие способы обойти ограничение
В любых изданиях:
🔹 Выполняйте установку, не подключаясь к сети. На первом экране OOBE нажмите
🔹 Используйте файл ответов - #классика блога в помощь. См. также статью блога об автоматизации OOBE.
Только в изданиях Pro и выше:
🔸Выберите настройку ПК для работы или учёбы, затем в вариантах входа выберите присоединение к домену и задайте имя локальной учетной записи. Ничего связанного с доменом на самом деле не происходит. См. видео.
////
❌ Начиная с версии Windows 11 24H2 не работает вход в учетную запись Microsoft
👉 С учетом изменений в версии 24H2
Интернет и учетная запись Microsoft (MSA) теперь заложены в официальные системные требования Windows. В домашнее издание Windows 11 - с версии 21H2, а в профессиональное - с 22H2 (сборка 22557). Первую попытку форсировать это компания сделала еще в Windows 10 1903.
Я пользуюсь MSA, но всегда выполняю установку с локальным аккаунтом, чтобы контролировать имя профиля.
✅ Рабочие способы обойти ограничение
В любых изданиях:
🔹 Выполняйте установку, не подключаясь к сети. На первом экране OOBE нажмите
Shift+F10
, щелкните окно командной строки и введите oobe\bypassnro
. Подробнее в отдельном посте.🔹 Используйте файл ответов - #классика блога в помощь. См. также статью блога об автоматизации OOBE.
Только в изданиях Pro и выше:
🔸Выберите настройку ПК для работы или учёбы, затем в вариантах входа выберите присоединение к домену и задайте имя локальной учетной записи. Ничего связанного с доменом на самом деле не происходит. См. видео.
////
❌ Начиная с версии Windows 11 24H2 не работает вход в учетную запись Microsoft
1@1.ru
с паролем 1
. Ранее, если MSA не существует или заблокирована, открывался путь в локальную учетную запись. Теперь этот путь блокирует новый экран с предложением сбросить пароль.🆕 Что нового в Windows 11 24H2 для ИТ-специалистов и разработчиков
Для начала всем интересующимся Windows рекомендую большие подборки Community (RU) и Winaero (EN).
ℹ️ Для ИТ-специалистов у Microsoft есть статья What's new in Windows 11, version 24H2 с ценным упоминанием о новой иконке диспетчера задач и эффекте Mica в его настройках :) Отмечу многочисленные изменения в SMB и LAPS, а также новинку - Personal Data Encryption (PDE). Это корпоративное шифрование пользовательских папок на уровне файлов под крылом Windows Hello и под управлением Intune.
Для разработчиков я нашел изменения в:
• API электропитания в той же статье для IТ Pro
• доступе к Wi-Fi и местоположению
• разработке драйверов
В остальном Microsoft делает упор на ИИ - NLP, OCR, живые субтитры, Recall.
////
Помимо списка ссылок расскажу про два заинтересовавших меня нововведения в 24H2.
🔁 Чекпойнты накопительных обновлений
Первый выпуск Windows 11 привнес ряд заметных улучшений в накопительные обновления. В 24H2 процесс эволюционировал. До сих пор при доставке обновлений дельта вычислялась относительно состояния компонентов в [условном] RTM.
Теперь некоторые накопительные обновления служат контрольными точками - чекпойнтами, и дельта вычисляется уже относительно них. Тем самым уменьшается размер ежемесячных обновлений и экономится место на диске, а установка проходит быстрее.
Сокращение размера обновлений будет наиболее заметным в сценарии, когда новая версия ОС доставляется постепенно в рамках накопительных обновлений и включается тумблером. Так было с Windows 11 23H2 и Windows 10 многократно. Теперь #тумблер будут выпускать наряду с чекпойнтом. Он и станет базой для следующих накопительных обновлений, нежели прошлогодний RTM.
Подробнее в блоге IT Pro 📃
▶️ Sudo для Windows
Тут пошли по стопам Linux. Если выполнить с обычными правами, например:
Включив sudo в настройках разработчика в Параметрах, можно в той же консоли добавить
Подробнее о параметрах sudo для Windows в документации 📃
Запрос UAC придется одобрять каждый раз. В этом заметное отличие UX от Linux, где после ввода пароля его не просят для sudo на протяжении N минут (настраивается) 🐧
Кэш учетных данных есть в gsudo, которая также может повышать команды #PowerShell. Нативная утилита sudo этого не умеет, но у меня есть #классика блога: sudo и resudo в PowerShell ✌️
Для начала всем интересующимся Windows рекомендую большие подборки Community (RU) и Winaero (EN).
ℹ️ Для ИТ-специалистов у Microsoft есть статья What's new in Windows 11, version 24H2 с ценным упоминанием о новой иконке диспетчера задач и эффекте Mica в его настройках :) Отмечу многочисленные изменения в SMB и LAPS, а также новинку - Personal Data Encryption (PDE). Это корпоративное шифрование пользовательских папок на уровне файлов под крылом Windows Hello и под управлением Intune.
Для разработчиков я нашел изменения в:
• API электропитания в той же статье для IТ Pro
• доступе к Wi-Fi и местоположению
• разработке драйверов
В остальном Microsoft делает упор на ИИ - NLP, OCR, живые субтитры, Recall.
////
Помимо списка ссылок расскажу про два заинтересовавших меня нововведения в 24H2.
🔁 Чекпойнты накопительных обновлений
Первый выпуск Windows 11 привнес ряд заметных улучшений в накопительные обновления. В 24H2 процесс эволюционировал. До сих пор при доставке обновлений дельта вычислялась относительно состояния компонентов в [условном] RTM.
Теперь некоторые накопительные обновления служат контрольными точками - чекпойнтами, и дельта вычисляется уже относительно них. Тем самым уменьшается размер ежемесячных обновлений и экономится место на диске, а установка проходит быстрее.
Сокращение размера обновлений будет наиболее заметным в сценарии, когда новая версия ОС доставляется постепенно в рамках накопительных обновлений и включается тумблером. Так было с Windows 11 23H2 и Windows 10 многократно. Теперь #тумблер будут выпускать наряду с чекпойнтом. Он и станет базой для следующих накопительных обновлений, нежели прошлогодний RTM.
Подробнее в блоге IT Pro 📃
▶️ Sudo для Windows
Тут пошли по стопам Linux. Если выполнить с обычными правами, например:
fsutil fsinfo ntfsinfo C:
, будет ошибка из-за недостатка прав. Придется перезапускать консоль с полными правами. Включив sudo в настройках разработчика в Параметрах, можно в той же консоли добавить
sudo
к команде: sudo fsutil fsinfo ntfsinfo C:
, одобрить запрос UAC и получить результат!Подробнее о параметрах sudo для Windows в документации 📃
Запрос UAC придется одобрять каждый раз. В этом заметное отличие UX от Linux, где после ввода пароля его не просят для sudo на протяжении N минут (настраивается) 🐧
Кэш учетных данных есть в gsudo, которая также может повышать команды #PowerShell. Нативная утилита sudo этого не умеет, но у меня есть #классика блога: sudo и resudo в PowerShell ✌️
🔎 Как очистить историю поисковых запросов в меню Пуск
Недавно таким вопросом задался в чате
Казалось бы, простой вопрос, но ответ не лежит на поверхности.
ℹ️ Для начала поиск в Пуске - это фактически отдельное приложение Поиск (
В статье базы знаний KB4553482 есть раздел "Журнал поиска на этом устройстве" с инструкциями по очистке из Параметров. Также в интернетах можно найти совет сбросить приложение
Якобы все это удаляет историю поисковых запросов в меню Пуск. И это даже правда. Но есть нюанс © Эти действия очищают историю запросов приложения Поиск, хранящуюся локально 💻
Как следствие, это еще не конец нашей истории, а только середина!
☁️ В приложение Поиск возможен вход с учетной записью Microsoft (MSA). Из коробки это происходит автоматически при:
• использовании MSA в Windows вместо локального аккаунта
• первом входе с MSA в любое приложение Microsoft, что влечет за собой вход с этим аккаунтом во все приложения компании
👤 Визуально связь с облачным аккаунтом определяется по аватарке в правом верхнем углу поиска. И в этом случае все поиски в интернете сохраняются в облаке. Более того, там собраны все запросы в Bing, где бы вы их ни делали.
👉 При использовании MSA очистка локальной истории и сброс
Если внимательно присмотреться к истории запросов
✅ Кардинальное решение - локально отключить все обращения к Bing политикой или твиком реестра, тут #классика блога в помощь! Это полностью разрывает связь с облаком - поиск перестает подкачивать историю запросов в Bing и веб-содержимое, обретая аскетичный вид. А поиски приложений и настроек можно очистить из Параметров.
The End ✌️
Недавно таким вопросом задался в чате
dartraiden
, проиллюстрировав ситуацию скриншотом. В течение пары недель этим же интересовались в форуме и снова в чате. Пора писать пост, и я публикую его под одним из девизов канала - срыв покровов!Казалось бы, простой вопрос, но ответ не лежит на поверхности.
ℹ️ Для начала поиск в Пуске - это фактически отдельное приложение Поиск (
Win+S
). Именно в него вы переключаетесь, когда в Пуске ищете приложения или настройки либо выполняете поиск в интернете. Все недавние запросы видны сразу при открытии поиска любым способом. В статье базы знаний KB4553482 есть раздел "Журнал поиска на этом устройстве" с инструкциями по очистке из Параметров. Также в интернетах можно найти совет сбросить приложение
Client.CBS
(Feature Experience Pack) из #PowerShell:Get-AppPackage -Name MicrosoftWindows.Client.CBS | Reset-AppxPackage
Якобы все это удаляет историю поисковых запросов в меню Пуск. И это даже правда. Но есть нюанс © Эти действия очищают историю запросов приложения Поиск, хранящуюся локально 💻
Как следствие, это еще не конец нашей истории, а только середина!
☁️ В приложение Поиск возможен вход с учетной записью Microsoft (MSA). Из коробки это происходит автоматически при:
• использовании MSA в Windows вместо локального аккаунта
• первом входе с MSA в любое приложение Microsoft, что влечет за собой вход с этим аккаунтом во все приложения компании
👤 Визуально связь с облачным аккаунтом определяется по аватарке в правом верхнем углу поиска. И в этом случае все поиски в интернете сохраняются в облаке. Более того, там собраны все запросы в Bing, где бы вы их ни делали.
👉 При использовании MSA очистка локальной истории и сброс
Client.CBS
не помогут убрать из списка поиски в интернете. Потому что вся история Bing заново подтянется в локальное хранилище из облачного аккаунта! Историю поиска в интернете надо удалять в настройках конфиденциальности учетной записи Microsoft, а именно - в истории поиска! Если внимательно присмотреться к истории запросов
dartraiden
, там явно не взрослый мужик, а школьники что-то ищут в интернете 😎 Как выяснилось, это "аккаунт, купленный за копейки для доступа к геймпассу". То есть им пользуется множество людей. Поэтому история будет активно пополняться чужими запросами в любом случае!✅ Кардинальное решение - локально отключить все обращения к Bing политикой или твиком реестра, тут #классика блога в помощь! Это полностью разрывает связь с облаком - поиск перестает подкачивать историю запросов в Bing и веб-содержимое, обретая аскетичный вид. А поиски приложений и настроек можно очистить из Параметров.
The End ✌️
🚀 Как закрепить произвольный файл в меню Пуск
Вопрос из чата. В графическом интерфейсе возможность закрепления в Пуск предусмотрена только для папок, исполняемых файлов и ярлыков к ним.
👉 Задача с любым файлом элементарно решается обходным путём. Нужен исполняемый файл, с помощью которого откроется ваш файл.
1. На рабочем столе щелкните правой кнопкой мыши - Создать - Ярлык
2. Впишите:
3. Задайте ярлыку значок и закрепите его в меню Пуск
Файл откроется в сопоставленном с ним приложении. Вместо
💡 Из этой же серии #классика канала:
• Как добавить ярлык интернета в Пуск
• Закрепляемый ярлык на любой элемент Параметров
• Как создать ярлык на магазинное приложение на панели файлового менеджера
• Как открыть конкретный файл в приложении, отличном от приложения по умолчанию
Вопрос из чата. В графическом интерфейсе возможность закрепления в Пуск предусмотрена только для папок, исполняемых файлов и ярлыков к ним.
👉 Задача с любым файлом элементарно решается обходным путём. Нужен исполняемый файл, с помощью которого откроется ваш файл.
1. На рабочем столе щелкните правой кнопкой мыши - Создать - Ярлык
2. Впишите:
explorer "полный путь к файлу тут"
3. Задайте ярлыку значок и закрепите его в меню Пуск
Файл откроется в сопоставленном с ним приложении. Вместо
explorer
можно указывать в кавычках полный путь к конкретному приложению, если оно поддерживает в качестве параметра командной строки путь к файлу.💡 Из этой же серии #классика канала:
• Как добавить ярлык интернета в Пуск
• Закрепляемый ярлык на любой элемент Параметров
• Как создать ярлык на магазинное приложение на панели файлового менеджера
• Как открыть конкретный файл в приложении, отличном от приложения по умолчанию
😎 Как открыть "Мой компьютер" двойным щелчком по ярлыку
Что? Да :) Вопрос задал в чате Андрей Третьяков. Компьютер уже не "мой", а "этот". И ярлык уже по дефолту скрыт с рабочего стола (включается в
Андрей заметил, что в Windows 11 не всегда открывается новое окно со списком дисков и устройств. Иногда на передний план выходит имеющееся окно проводника с последней активной вкладкой.
Я потыкал и определил, что такое поведение наблюдается, когда этот компьютер уже открыт в одной из вкладок! Убрав значок с рабочего стола, девелоперы забыли про него. С глаз долой - из сердца вон! 🤦♂️
Сочетание клавиш
🟡 Долго и неудобно: ПКМ на значке компьютера - Показать дополнительные параметры - Открыть в новом процессе. Можно сразу открывать старое меню с
🟢 Быстро и просто: создать новый ярлык с командой:
#Классика блога про папки shell в помощь.
////
Проблема воспроизводилась в чистой установке Windows 11 24H2, но у меня ушла с ноябрьским обновлением
👉 Так или иначе, вопрос решает
Пруфы в канале:
• Как закрепить произвольный файл в меню Пуск
• Как добавить ярлык интернета в Пуск
• Закрепляемый ярлык на любой элемент Параметров
• Как создать ярлык на магазинное приложение на панели файлового менеджера
• Как открыть конкретный файл в приложении, отличном от приложения по умолчанию
Что? Да :) Вопрос задал в чате Андрей Третьяков. Компьютер уже не "мой", а "этот". И ярлык уже по дефолту скрыт с рабочего стола (включается в
Win+R
- desk.cpl ,5
). И все же...Андрей заметил, что в Windows 11 не всегда открывается новое окно со списком дисков и устройств. Иногда на передний план выходит имеющееся окно проводника с последней активной вкладкой.
Я потыкал и определил, что такое поведение наблюдается, когда этот компьютер уже открыт в одной из вкладок! Убрав значок с рабочего стола, девелоперы забыли про него. С глаз долой - из сердца вон! 🤦♂️
Сочетание клавиш
Win+E
работало четко, но Андрею хотелось бы мышью. Что ж, есть пара вариантов.🟡 Долго и неудобно: ПКМ на значке компьютера - Показать дополнительные параметры - Открыть в новом процессе. Можно сразу открывать старое меню с
Shift+ПКМ
, но это уже с клавиатурой.🟢 Быстро и просто: создать новый ярлык с командой:
explorer shell:MyComputerFolder
#Классика блога про папки shell в помощь.
////
Проблема воспроизводилась в чистой установке Windows 11 24H2, но у меня ушла с ноябрьским обновлением
26100.2314
. Хотя у Андрея все еще наблюдалась в декабрьском превью 26100.2454
. 👉 Так или иначе, вопрос решает
explorer.exe
. И он регулярно приходит на выручку, когда сталкиваешься с ограничениями графического интерфейса!Пруфы в канале:
• Как закрепить произвольный файл в меню Пуск
• Как добавить ярлык интернета в Пуск
• Закрепляемый ярлык на любой элемент Параметров
• Как создать ярлык на магазинное приложение на панели файлового менеджера
• Как открыть конкретный файл в приложении, отличном от приложения по умолчанию
▶️ Простой и эффективный поиск текста в PowerShell - Select-String
По работе нередко возникают задачи, связанные с поиском текста в разрозненных источниках. Например, есть сервис, который работает потихоньку и пишет логи с ежедневной ротацией. В какой-то момент обнаруживается сбой и связанная ошибка в логе. Нужно узнать, когда это происходило за некий срок. А после исправления проблемы убедиться, что она не воспроизводится.
Как правило, люди открывают Notepad++, загружают туда пачку логов и выполняют поиск во всех открытых файлах. На предложение использовать скрипт пожимают плечами - мол, это же разовая задача. И так сойдет 👌
У этого подхода много проблем:
1. Медленно.
2. Не выгружается сводка и найденные данные.
3. При большом количестве / размере файлов это работает плохо или вообще никак.
Да и не разовая это у них задача, поэтому скрипт подходит отлично.
👉 В #PowerShell для этой цели есть командлет
Срыва покровов здесь нет, но есть нюанс. Его я замечал раньше в рамках гугления, а сейчас вижу в скриптах чат-ботов и джунов, что примерно одно и то же :)
🤖 Чат-боту задача по поиску текста ставится общими словами. Например, найди все строки с 'exception ' в этих файлах, посчитай количество на каждый файл, запиши в файл эту строку и 20 следующих, выведи на экран сводку и т.д.
И бот быстро пишет рабочий скрипт. Только он зачастую использует другой командлет -
Простое сравнение. Ищем ошибку '0x800f0805' десяти файлах
У меня
💡 И кстати по поводу контекста, у
////
В общем, если вам нужно дальше работать с чистыми найденными строками в качестве объектов,
🍪 Бонус - #классика канала про мониторинг логов в реальном времени при помощи:
• командлета PowerShell
• утилиты CMTrace
По работе нередко возникают задачи, связанные с поиском текста в разрозненных источниках. Например, есть сервис, который работает потихоньку и пишет логи с ежедневной ротацией. В какой-то момент обнаруживается сбой и связанная ошибка в логе. Нужно узнать, когда это происходило за некий срок. А после исправления проблемы убедиться, что она не воспроизводится.
Как правило, люди открывают 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
Docs
Select-String (Microsoft.PowerShell.Utility) - PowerShell
The Select-String cmdlet uses regular expression matching to search for text patterns in input strings and files. You can use Select-String similar to grep in Unix or findstr.exe in Windows. Select-String is based on lines of text. By default, Select-String…
⚙️ Как избавиться от предупреждения в проводнике при копировании файлов на диск, отформатированный в ext4
Этот вопрос задал в чате Юрий. Он переносил файлы на внешний диск с файловой системой ext4 и получал на каждый исполняемый файл такой запрос:
Вы действительно хотите переместить файл без его свойств?
Я сходу предложил использовать консольные средства. Например, в #PowerShell можно копировать файлы и папки командлетом
Однако Юрий не желал каждый раз лезть в консоль. Мол, он регулярно копирует файлы с локального диска на внешний. Что ж, для регулярных задач синхронизации файлов в Windows испокон веков есть прекрасная утилита командной строки robocopy! ☑️
Но и это Юрия не устроило. И сторонние файловые менеджеры тоже отметались :) Он оказался маководом и хотеламазинга просто копировать в проводнике. Он также сообщил, что нагуглил в качестве решения утилиту NTFS Stream Explorer. Но опять же, в ней требовались ручные действия перед копированием.
////
ℹ️ Здесь в самый раз подходила #классика блога Альтернативные потоки данных NTFS. Юрий нашел в ней твик реестра, но тот не помог. Тогда все-таки пришлось читать, вникать, и вскоре мы увидели примерно такую картину. Я сохранил смысл, но в качестве примера взял свой файл из папки Downloads и сократил вывод до сути.
Сразу прояснилось множество деталей:
1. Альтернативный поток NTFS пишет SmartScreen.
2. Исполняемый файл скачан в Microsoft Edge, что вытекает из п. 1 и проверяется чтением потока.
3. Потока с идентификатором зоны нет. Он уже удален либо запись отключена политикой ↓
4. Твик с политикой "Не хранить сведения о зоне..." бессилен против п. 1.
Тут школьники посоветуют "отключить SmartScreen". Причем в такой формулировке неочевидно, что конкретно отключать. Однако снижение уровня безопасности (особенно у маковода :) - это не наш путь.
////
Избавиться от предупреждения в проводнике можно без твиков / политик и отключений функций безопасности. Мы знаем, что при загрузке в любом браузере файлы получают поток с идентификатором зоны. Кроме того, в Microsoft Edge к исполняемым файлам свой поток пишет SmartScreen.
✅ Решение укладывается в одну команду. В примере потоки от SmartScreen и диспетчера вложений удаляются из всех файлов в папке "Загрузки" рекурсивно. После чего проводник уже не суетится при их копирование на ext4.
Это можно поставить в планировщик хоть ежечасно. В простом задании исполняемым файлом будет
Скрытие консольных окон я разбирал четыре года назад, и с тех пор ничего не изменилось. ✌️
Этот вопрос задал в чате Юрий. Он переносил файлы на внешний диск с файловой системой ext4 и получал на каждый исполняемый файл такой запрос:
Вы действительно хотите переместить файл без его свойств?
Я сходу предложил использовать консольные средства. Например, в #PowerShell можно копировать файлы и папки командлетом
Copy-Item
. И это сработало! ☑️Однако Юрий не желал каждый раз лезть в консоль. Мол, он регулярно копирует файлы с локального диска на внешний. Что ж, для регулярных задач синхронизации файлов в Windows испокон веков есть прекрасная утилита командной строки robocopy! ☑️
Но и это Юрия не устроило. И сторонние файловые менеджеры тоже отметались :) Он оказался маководом и хотел
////
ℹ️ Здесь в самый раз подходила #классика блога Альтернативные потоки данных 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 с помошью PowerShell
В чате участник
Первая команда показывает обнаруженные угрозы, а вторая - исключенные из мониторинга пути. Выяснилось, что исключена папка
👉 Вообще, положено добавлять в исключения конкретную папку. И защитнику надо указывать на нее явно, нежели на родительскую папку. В графическом интерфейсе иначе и не выйдет - что выбрали, то и исключили.
ℹ️ В #PowerShell вы можете получить сведения о параметрах защитника командлетом Get-MpPreference. И есть еще два для установки параметров:
• Add-MpPreference добавляет значения к существующему набору настроек.
• Set-MpPreference задает свой набор настроек, перезаписывая текущий.
Оба поддерживают подстановочные символы
Это исключает только папки одного уровня вложенности. Два уровня -
////
В рамках того же обсуждения
Мне кажется, что раньше в графическом интерфейсе были базовые настройки для действий в зависимости от серьезности угрозы. Возможно, их выпилили. Но это неважно, ведь есть PowerShell ♥️
Текущие настройки можно посмотреть так:
Ноль означает действие по умолчанию в зависимости от предпочтений Microsoft, заданных сигнатурами. Это написано в справке
Там же перечислены числовые значения для семи различных действий защитника. Например, 2 - карантин, 3 - удаление, 9 - игнорирование. Это помогает понять текущий уровень настроек.
Для каждого уровня серьезности угроз вы можете задать только эти три действия↑ (остальные применяются к конкретным экземплярам по их ИД). Например, вы хотите отправлять самые серьёзные угрозы в карантин вместо удаления:
////
Не стоит воздевать руки к небу, что конечным пользователям не дали тонко настроить компонент в графическом интерфейсе. Когда касается безопасности, я только за! Потому что для неопытных людей это кончается стрельбой в ногу, а то и в голову.
Консольные средства ставят хоть какой-то барьер от самострела. Заметьте, что здесь первый человек разрешал некий патч или кряк. А они традиционно служат самым распространенным транспортом для малвари. Второй же скорее интересовался с целью ослабить дефолтные настройки, нежели закрутить гайки ;)
В качестве завершающего аккорда здесь идеально подходит #классика блога О роли головного мозга в защите операционной системы ✌️
В чате участник
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
////
Не стоит воздевать руки к небу, что конечным пользователям не дали тонко настроить компонент в графическом интерфейсе. Когда касается безопасности, я только за! Потому что для неопытных людей это кончается стрельбой в ногу, а то и в голову.
Консольные средства ставят хоть какой-то барьер от самострела. Заметьте, что здесь первый человек разрешал некий патч или кряк. А они традиционно служат самым распространенным транспортом для малвари. Второй же скорее интересовался с целью ослабить дефолтные настройки, нежели закрутить гайки ;)
В качестве завершающего аккорда здесь идеально подходит #классика блога О роли головного мозга в защите операционной системы ✌️
🛡️ Автоматическое определение установщиков в UAC
С момента появления в Windows Vista контроль учетных записей эволюционировал с каждой новой версией ОС. Сегодня в фокусе малоизвестное, но любопытное нововведение времен Windows 10.
ℹ️ Исполняемые файлы должны содержать манифест, где указаны требования к правам пользователя на запуск. Если там прописано
Манифест с
👉 Именно с установщиками и связано изменение UAC в Windows 10. Запрос появляется, когда манифест не содержит требования к правам, а имя исполняемого файла содержит:
Это работает только с 32-разрядными файлами, причем имя файла - не единственный триггер. Все критерии эвристики описаны в документации. Ссылка ведет на веб-архив 2017 года, потому что из текущей версии статьи это уже выпилено 🙄 В Windows 11 работает, разумеется.
📝 Заметка на полях: в обоих документах заявляют возможность смены часового пояса без прав администратора. Что в 2025 году нам выдают за новую фичу :)
Возвращаясь к UAC, это изменение идеально подходило бы для Windows 7. Для Vista жести и так хватало, а в 2015 году 64-разрядные программы уже пошли в массы. Впрочем, 32-разрядных и сейчас еще в немало. Легаси полно в корпоративной среде, ради которой это все и затевалось.
На видео фича в действии. Я взял первую попавшуюся 32-разрядную утилиту NirSoft, в которой манифест не диктует права на запуск ✌
С момента появления в 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, в которой манифест не диктует права на запуск ✌