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

Чат: @winsiders
Блог: outsidethebox.ms
ЛС: @vsterkin
Донаты ₽: boosty.to/sterkin
РКН: https://clck.ru/3LBugC
Download Telegram
🚀 Ускорение работы в консоли с помощью псевдонимов и функций

▶️ PowerShell
В моей подборке Ускорение ввода команд в PowerShell я поставил псевдонимы (aliases) первыми в списке. Одновременно указав, что не создаю свои, чтобы не страдать за пределами привычной среды.

Более того, в PowerShell псевдоним - это просто альтернативное имя для существующего командлета или исполняемого файла. В него нельзя внедрить сквозные аргументы. Поэтому не получится создать псевдоним, например, выполняющий Get-ChildItem C:\ -Force. Не говоря уже о последовательном запуске нескольких команд.

👉 Альтернатива - функция в профиле!
function nr { 
Get-NetAdapter -Name "Ethernet" |
Restart-NetAdapter -Confirm:$False
}

После перезагрузки профиля командой . $PROFILE (спасибо, Илья) или перезапуска консоли команда nr будет вызывать одноименную функцию и выполниять заложенные в нее команды.

🐧 Bash
В отличие от PowerShell, Bash поддерживает аргументы и объединение команд в рамках псевдонима. И я этим пользуюсь.

Пример псевдонима для отображения списка логов сервера.
# открыть профиль
nano ~/.bashrc
# вписать псевдоним, затем сохранить файл
alias xl='sudo ls -l /var/log/myserver'
# применить изменения к текущему сеансу
source ~/.bashrc

Далее xl будет выполнять sudo ls -l /var/log/myserver.

Для объединения нескольких команд тоже можно задействовать псевдоним. Но можно и функцию! Пример функции для перезапуска сервера, отображения его статуса и последующего мониторинга лога в консоли:
xr() {
sudo bash -c "systemctl restart myserver && \
systemctl status myserver && \
tail -f /var/log/myserver/access.log"
}


А какие у вас любимые псевдонимы и функции, ускоряющие ввод команд?
👍33❤3👌2
😎 Как же подешевела Винда при импортозамещении!
😁134🔥11🤣9👍4❤1
⚙️ Как задать порядок дисплеев при подключении по RDP

Намедни я отключил мониторы от ноутбука, а потом подключил их обратно. И не замечал ничего необычного пару часов, пока не подключился к локальной виртуальной машине посредством файла .RDP. В ней оказались перепутаны основной и дополнительный дисплеи. Соответственно, все приложения стали открываться на другом мониторе 🤷‍♂️

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

Тогда я просто запустил mstsc и при подключении к ВМ поставил флажок "Использовать все мониторы". В этом случае проблема не наблюдалась. Стало понятно, что она кроется именно в файле .RDP!

👉 Порядок дисплеев определялся параметром selectedmonitors. У меня было прописано: selectedmonitors:s:3,4

ИД дисплеев выводит команда mstsc /L. Три года назад она фигурировала в посте Как подключиться к RDP во весь экран на несколько мониторов, но не на все.

Основной монитор тогда имел номер 3, а сейчас стал 4. Я поменял в параметре цифры местами, сохранил файл и всё заработало! ✌️
2👍72🔥30❤6
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍82👀11🔥4❤1
​⚙️ Зачистка меню "Открыть с помощью" от хвостов удалённого приложения и массовая смена файловых ассоциаций

Я удалил приложение nomacs для просмотра картинок и обнаружил в меню "Открыть с помощью" две проблемы:
1. Приложение осталось вверху списка в качестве дефолтного.
2. Для других приложений отсутствовала кнопка Always, чтобы всегда открывать в них.

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

🧹 1. Отмена регистрации приложения для типов файлов

Это приложение прописалось в разделе реестра HKCU\Software\Classes, создав для каждого типа графических файлов подраздел вида \nomacs.png.3. Если удалить разделы программы из классов, приложение не будет предлагаться в качестве дефолтного для Open with.

Задача решается перебором в скрипте #PowerShell (в командах удаления добавлен параметр -WhatIf для страховки от стрельбы в ногу :)

$classesPath = "HKCU:\Software\Classes"
$appKeys = Get-ChildItem -Path $classesPath | Where-Object { $_.PSChildName -like "nomacs.*" }

if ($appKeys) {
foreach ($key in $appKeys) {
Write-Host "Deleting class key: $($key.Name)" -ForegroundColor Yellow
Remove-Item -Path $key.PsPath -Recurse -Force -ErrorAction SilentlyContinue -WhatIf
}
}


🪚 2. Удаление пользовательских ассоциаций

Здесь сложнее. У каждого расширения в разделе реестра FileExts есть два подраздела:
• OpenWithProgids - ИД приложений, которые могут открывать тип файла
• UserChoice - выбор пользователя с ИД и хэшем приложения

Get-ChildItem HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\

Hive: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png

Name Property
---- --------
OpenWithProgids nomacs.png.3 :
UserChoice ProgId : nomacs.png.3
Hash : fjmDvOs2rGo=

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

🔬 Нюансы

Скрипты на перебор простенькие, создание таких я давно делегирую нейронке. Выдав скрипт, Gemini предупредила, что удаление из FileExts может не сработать. И тогда нужно запускать скрипт от имени SYSTEM или TrustedInstaller (TI) с помощью psexec от Sysinternals.

В моем случае параметры nomacs удалились без проблем. Хотя в целом нейронка права: там нельзя просто взять и удалить. Но есть нюанс © Её обходной путь тоже не сработает 😎

Во-первых, если вы запускаете редактор реестра от имени другой учётной записи, даже системной, то видите её раздел реестра HKCU, а не свой. Другими словами, ваших параметров там не будет. И, кстати, psexec не позволяет запускать исполняемые файлы от имени TI, хотя других вариантов полно.

Во-вторых, параметры в разделе FileExts защищены не столько посредством ACL (это можно было менять скриптом), сколько специальным драйвером UCPD, User Choice Protection Driver. Microsoft добавила его в 2024 году для дополнительной защиты файловых ассоциаций от изменений без ведома пользователя (подробнее: раз, два).

На это есть несколько обходных путей.

🪟 Встроенными средствами вы можете:

• войти в другую учётную запись или Windows RE и подключить в HKU ваш NTUSER.DAT (с корректировкой путей в скрипте, примерно так)

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

🧰 Сторонняя утилита SetUserFTA позволяет сразу задать желаемые ассоциации.

Примеры:
• настройка png: setuserfta .png IrfanView.png
• импорт конфигурационного файла: setuserfta c:\file.cfg
И сам файл:
.png, IrfanView.png
.jpg, IrfanView.jpg
.jpeg, IrfanView.jpeg

Здесь создаётся новая связь с конкретным приложением. Причём в обход работающего драйвера UCPD ✌️
❤33👍17🔥16👏12👌1
😎 Спустя 5 лет в Windows снова можно размещать панель задач у любого края экрана. И это просто Наивысший #автоперевод
😁128🔥33🙈12👍5🏆3🦄2❤1👏1
​⚙️ Параметры: как диагностировать сообщение "Некоторыми параметрами управляет ваша организация"
Без гуглояндекса и нейронок

Некоторые настройки в Параметрах могут быть заблокированы, а вверху страницы отображаться вынесенное в заголовок сообщение. Его английский вариант: Some settings are managed by your organization.

ℹ️ Это означает, что настройку контролирует какая-то групповая политика. Но анализ результирующих политик может не помочь, если изменения вносились напрямую в реестр.

Например, вы применили твик и забыли, какой именно 😎 В моём случае захотелось сменить картинку на экране блокировки, но выбор был недоступен.

👉 Вам понадобятся Process Monitor, знание английских названий элементов интерфейса, чёткий порядок действий и немного терпения.

1. Запустите Process Monitor, отключите захват (Ctrl+E) и включите отслеживание реестра.

2. Откройте фильтр (Ctrl+L) и задайте условия:
• Process is: SystemSettings.exe
• Path contains: часть названия элемента интерфейса
В моём примере настройка Lock Screen, я вписываю lock

3. Перезапустите Параметры и перейдите на страницу, предшествующую той, которая контролируется политиками. Без перезапуска приложение может не обратиться к реестру заново.

4. Включите захват (Ctrl+E), перейдите на проблемную страницу и немедленно отключите захват.

5. В списке ищите (Ctrl+F) пути, в имени которых содержится Policies. Это разделы с групповыми политиками. Исключения есть, но крайне редкие.

6. Выделите найденный путь, перейдите в реестр (Ctrl+J) и проверьте наличие параметра, его смысл и значение.

////

📽 В ролике↓ сразу видно, что проверяются два параметра реестра в разделе HKLM\SOFTWARE\Policies\Microsoft\Windows\Personalization:
• Nolockscreen
• NoChangingLockScreen

Действительно, я рассказывал в канале, как отключить экран блокировки во избежание лишних телодвижений при входе в ОС ✌️
👍78👏9❤7🔥4🎉1👌1
⌨️ Как ввести пароль или ПИН-код на экране входа, если клавиатура не работает

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

👉 На помощь приходит экранная клавиатура!

Главное - войти в систему, а там есть варианты. На практике даже это не понадобилось. После входа физическая клавиатура заработала нормально ✌️
👍44😁7❤6👏1🫡1
​🌐 Автоматическое переключение браузеров и их профилей на десктопе

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

• работа / дом
• напрямую / через прокси
• сертификат Минцифры / без него

Разумеется, можно открывать конкретный браузер и ходить в нём на нужные сайты. Но надо всегда об этом помнить. К тому же UX ломается, когда вы переходите по ссылке из почты или мессенджера.

Мы уже обсуждали решения для таких сценариев на смартфоне. Сегодня - десктоп!

🦔 Профили в Microsoft Edge

Edge - потому что в нём есть уникальные настройки профилей. Наиболее активно я использовал автопереключения между профилями, когда у меня на работе было два разных тенанта Windows 365. Это было больно, и Edge спасал!

Стандартно в Chromium вы переходите из других программ в последний использовавшийся профиль. И зачастую не в тот 🤷‍♂️

В Edge есть:

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

🔹 Настройки для поведения в зависимости от входа в браузер с корпоративной или личной учётной записью, а также от типа сайта (Интранет, шоппинг).

🔹 Тонкая настройка переключения профилей. Вы можете связать тот или иной домен с любым профилем и дополнительно указать, нужно переключаться в этот профиль или нет. И это будет работать во всех случаях: при открытии ссылок из других программ, веб-серфинге, вставке URL в адресную строку. Очень удобно!

Ложка дёгтя: настройки доменов недостаточно гибкие. Хотелось бы иметь возможность указать подстановочные символы (*.sberbank.ru). Это есть в решении, которое я рассмотрю дальше.

🐻 BrowserSelector

Магазинное приложение BrowserSelector подкинул в чате Alexey. Оно решает те же задачи, но на уровне браузеров. Впрочем, на уровне профилей тоже может: достаточно дописать в пути к браузеру ключ запуска конкретного профиля.

Работает похоже на решения для Android. Приложение становится браузером по умолчанию, а дальше разруливает ваши переходы по ссылкам в зависимости от настроек доменов.

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

////

У меня дефолтный браузер - Edge. И пока не возникало необходимости в стороннем решении для автопереключения. Но хорошо, когда есть выбор! ✌️
👍44❤4🤣4🔥1👌1
☕️ Гадание на кофейной гуще: какая версия ОС у автора письма?

Сегодня в рубрике "Вы нам писали" некто Иван, у которого выдался тяжелый день 😂 Писал он мне примерно два года назад. Просто я на днях наткнулся на старый скриншот :)

ℹ️ В письме речь про Дело о восстановлении реестра, которое выручило множество людей. При этом заголовок в поисковиках: "Как восстановить реестр, когда Windows не загружается".

Автор письма неадекватен не только потому, что оскорбил меня. К откату реестра прибегают, когда все прочие средства уже исчерпаны. А исходя из сообщения, после восстановления удалось дойти до экрана входа, то есть система загрузилась! Это же прогресс 🎉

Дальше можно было из среды восстановления править реестр для автологона и входить в систему. Глядишь, там бы и средства ввода поднялись.

////

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

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

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

Какие-то резервные кусты реестра у него явно были, иначе он вообще не смог бы откатиться. Но автоматический бэкап 
отключили ещё в 1803!

Значит, у него более старая ОС. Все каналы Windows 10 кроме долгосрочного уже давно принудительно обновили. В остатке LTSC 1511 и 1607 🌈 Но адепты этого издания 
при первой возможности переходят на свежий выпуск. А их два появилось с тех пор.

Остаются уже лишившиеся поддержки Windows 8.1 и Windows 7. Ретроград и плитки - понятия плохо совместимые 😃 Поэтому ставлю на Windows 7! ✔️


А бэкап реестра включите, вдруг пригодится! ✌️
👍38😁6❤5
⚙️ Как получить доступ к служебному разделу EFI, не изменяя его свойства
‌
Это продолжение сериала про получение доступа к служебным разделам без изменения свойств. В предыдущих эпизодах главным героем был раздел восстановления (WindowsRE). К нему пробирались за счёт:
‌
• идентификатора раздела (GUID)
• путей пространства имен NT (\\?\GLOBALROOT)
‌
Оба способа сработают и с разделом EFI с поправкой на другой идентификатор:
‌
# GUID
$id = "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}"
$lpath = (Get-Partition | where GptType -eq $id).AccessPaths[0]
Get-ChildItem -Force -Recurse -LiteralPath $lpath
‌
# NT namespace (Windows PowerShell only, not Core)
Get-ChildItem -Force -Recurse -LiteralPath \\?\GLOBALROOT\device\harddisk0\partition1\

‌
Но есть и более простой метод, с которым не нужно знать идентификатор раздела или помнить сложный синтаксис пути!
‌
mountvol S: /s
Get-ChildItem -Force -Recurse S:
mountvol S: /d

‌
У команды mountvol предусмотрен специальный ключ /s, который назначает именно разделу EFI заданную букву диска. Ключ /d удаляет её. Мнемоника: /s означает system, /d - delete.
‌
Разумеется, буква диска должна быть свободной, и для примера я выбрал ту же S .

#Классика блога в тему: Что произойдет, когда в Windows закончатся буквы дисков✌️
👍46🤝7🔥2❤1👌1
⌛️ Об архивах OSZone и ценности сообщества
‌
Я в чате делился ссылкой на архивы OSZone, но в канал так и не написал. А тут повод появился, который навёл меня на разные мысли...
‌
🔃 Об актуальности и ценности информации
Когда чуть более года назад появилось объявление о закрытии OSZone, многие стали выкачивать форум локально. Я этого не делал, потому что офлайн-копия для меня технической ценности не представляет по ряду причин.
‌
1️⃣ Информация устаревает по мере эволюции ОС и ПО
Это ведь только кажется, что Windows 11 - та же Windows 10 с другим оформлением. Да и Windows 10 в 2015 и 2021 годах - очень разные системы.
‌
Разумеется, множество аспектов передаётся из поколения в поколение Windows. Но такие знания вполне общедоступны и без форума. При этом архивные темы вам не дают четкого понимания, применимо ли то или иное решение к современной реализации.
‌
2️⃣ В офлайн-копии нет поиска
Форум без хорошего поиска бесполезен. Даже в живом форуме я применял очень специфические запросы, основанные на моей памяти - автор поста, фрагменты текста, особые ключевые слова. Без этого в огромном массиве данных невозможно было найти нужные темы, а скорее - сообщения в многостраничных темах. Нужно точно знать, что ищешь. И тогда, возможно, найдётся и в другом месте.
‌
В общем, почитать старые темы, чтобы поностальгировать и смахнуть скупую мужскую слезу или наоборот улыбнуться - для этого офлайн-копия годится. Но не более.
‌
3️⃣ Нейронки эффективнее архивов форума
Сейчас вообще бессмысленно пытаться решить проблему, листая древние темы. В лучшем случае в шапке будут инструкции - примерно как с медленной загрузкой. То есть конкретное руководство к действию.
‌
Нейронки же отвечают моментально, не токсичны. Да, они могут врать и предлагать дичь. Так этого и в форумах без жёсткой модерации хватает :)
‌
Основную массу тем в осевых форумах составляли одни и те же простые вопросы. Их нейронки могут порешать, в том числе с помощью наших же архивов.
‌
📢 О важности сообщества
Когда закрывался OSZone, было много запросов на передачу базы данных. Поступали они мне, потому что я много лет администрировал сообщество. Но я не был владельцем, и мог лишь транслировать его отказ. Наверное, я был единственным человеком, кому владелец мог бы передать или продать ресурс. Но мы с ним это не обсуждали.
‌
Недавно мне написал некто Олег. Он сообщил, что поднял живой форум на основе офлайн-архивов. Дескать, в форуме много актуальной информации (sic!). Я в курсе нескольких таких проектов, но он был первый, кто сообщил мне.
‌
И действительно доменное имя было почти наше, а форум выглядел до боли знакомо: логотип, оформление, ники пользователей, содержимое тем 💔
‌
Олег предложил мне администрировать свой форум. Причём под моим ником Vadikan, с унаследованием всех сообщений. Более того, в специальной теме он предлагал каждому проходимцу подать заявку на владение любым историческим аккаунтом 🤦‍♂️
‌
Мы, кстати, очень щепетильно относились к принадлежности сообщений. При удалении участника все его посты становились от имени гостя. Их невозможно было унаследовать при новой регистрации ника. Конечно, в цитатах и ответах исходный ник был виден, но это уже сообщения других людей.
‌
Глядя на этот ресурс, я не мог отделаться от ощущения, что человек не только присвоил себе чужое, но и раскопал могилы и пляшет на костях. Да ещё и приторговывает местами на кладбище 😡 Мой ответ был достаточно жёстким.
‌
Я вполне допускаю, что такие проекты реализуются из лучших побуждений. Но их создатели не осознают, что является главной ценностью ресурса. Для постоянных участников значимость OSZone (да и вообще форумов) не в тоннах тем с разрозненной информацией. Куда важнее атмосфера! 👈 Её создают люди, составляющие ядро сообщества. Без них это будет совсем другой форум. И бессмысленно наклеивать на него наш логотип.
‌
Все попытки возродить форум OSZone без преемственности сообщества обречены на провал. Наш OSZone теперь может существовать лишь в режиме "только для чтения".
‌
🤐 Архивы
‌Онлайн: https://os-zone.net/
Версии тем для печати. Реализовано и поддерживается ветеранами форума. Спасибо, Goletsa, OlD_NiK, Piter Pen.
‌
Офлайн:
• Форум и сайт в HTML (спасибо, Констатин с safezone.cc)
• Форум и сайт в CHM (спасибо, Ostap K)
• Мой учебник по автоустановке Windows (CHM в 7z SFX). Также все наши CHM внедрены в файл Остапа↑
👍61❤18🤷‍♂8🔥5🤯2
⚙️ Как создать псевдоним для приложения
‌
В личку написал читатель Эльдар с вопросом, почему у меня не раскрыта тема псевдонимов приложений. В ответ я сослался на рассказ пятилетней давности. Но оказалось, что он хотел узнать, как самому создать псевдоним.
‌
В Windows псевдонимы для магазинных и вообще упакованных (packaged) приложений реализованы посредством точек повторной обработки (reparse points) особого типа. Они представлены файлами нулевого размера в папке WindowsApps вашего профиля.
‌
cd $env:localappdata\Microsoft\WindowsApps\
dir *.exe | ft Length,Attributes,Name
‌
Length            Attributes Name
------            ---------- ----
     0 Archive, ReparsePoint 7z.exe
     0 Archive, ReparsePoint 7zFM.exe
     0 Archive, ReparsePoint 7zG.exe
     0 Archive, ReparsePoint ActionsMcpHost.exe
     0 Archive, ReparsePoint bash.exe
...


По идее, если упакованное приложение подразумевает запуск из командной строки, псевдоним уже реализован разработчиком в манифесте с помощью элемента AppExecutionAlias. Тогда при установке приложения псевдоним автоматически создается в папке WindowsApps, которая в свою очередь добавлена в PATH. Благодаря этому приложение запускается из командной строки просто по псевдониму.
‌
Средствами системы создание псевдонимов не предусмотрено. Если разработчик тугой, возможны только обходные пути запуска. В общем случае вы можете закрепить приложение в Пуске, перетащить его оттуда в любую папку из PATH и далее запускать созданный тем самым ярлык из CMD-файла с желаемым именем и таким содержимым:
explorer <полный путь к.lnk>


Аналогично может работать и запуск по протоколу.
‌
С классическими Win32 приложениями эти ухищрения не нужны. Можно создать символическую ссылку на программу: с любыми именем и хоть в той же папке WindowsApps - будет почти как настоящий псевдоним :) CMD-файл в PATH или раздел реестра App Paths тоже решают вопрос - #классика блога в помощь.
‌
Наконец, если очень хочется именно псевдоним, можете воспользоваться модулем #PowerShell за авторством известного исследователя безопасности James Forshaw:  NtObjectManager. Пример команды в его же статье с глубоким разбором псевдонимов ✌
👍31❤3
Викторина. Какие функции доступны в Параметрах, либо в оснастке управления дисками (diskmgmt.msc) или вызываются из нее? Подразумевается, что Windows 11 установлена штатно, а диски не трогали.
Final Results
9%
Создание VHD(X)
6%
Подключение раздела в пустую папку NTFS
9%
Просмотр разметки диска
5%
Изменение разметки диска (MBR -> GPT)
1%
Назначение буквы разделу EFI
30%
Все эти функции доступны
3%
Только пункты 1, 2
17%
Только пункты 1, 2, 3
21%
Только пункты 1, 2, 3, 4
🔥8❤7🤔6🤣6
Windows 11, 10, etc - Вадим Стеркин
Викторина. Какие функции доступны в Параметрах, либо в оснастке управления дисками (diskmgmt.msc) или вызываются из нее? Подразумевается, что Windows 11 установлена штатно, а диски не трогали.
🧩 Экспресс-уточнение по викторине

В чате Alexey Kamanin справедливо заметил, что у чистого диска можно изменить разметку.

В четвертом пункте я подразумевал диск с ОС - задача ведь обычно там возникает. И не учел этот момент в формулировке.

Технически возможны первые четыре варианта. Поэтому правильный ответ - последний ✌️
🤣18❤9😁6👍2😎2👏1🦄1
▶️ PowerShell: как определить свободную букву диска
‌
В посте про mountvol я упомянул, что для подключения диска нужна свободная буква. Не всегда она известна заранее. В скриптах эта типовая задача решается конвейером в одну строку:
‌
1/ Создание списка букв
2/ Проверка существующих путей (занятых букв) перебором по списку
3/ Выбор свободной буквы
‌
Второй и третий этапы почти всегда одинаковые:
‌
<буквы> | Where-Object {!(Test-Path $_)} | Select-Object -First 1
‌
Иногда вместо Select-Object используют Get-Random, но это менее эффективно.
‌
А вот на первом этапе бывают варианты. Часто используют оператор Range для диапазона букв. Тут, кстати, два этапа конвейера.
‌
'j'..'z' | ForEach-Object { "${_}:" }
‌
Мне также встречалось перечисление символов ASCII, где 65 - А, 90 - Z. Но оно менее естественное.
‌
65..90 | ForEach-Object { [char]$_ + ":" }
‌
🔥 А недавно мне попался, пожалуй, самый любопытный способ:
‌
Get-ChildItem function:[j-z]: -Name
‌
В этой команде:
‌
🔹 function: - трюк для получения готового списка букв дисков. Здесь #PowerShell обращается к поставщику функций. Выполните Get-ChildItem -Path Function: и вы увидите не только загруженные из профиля функции, но и список букв дисков!
‌
🔹 [j-z]: - регулярное выражение, которое выбирает из списка функций только буквы в заданном диапазоне.
‌
🔹 -Name - параметр форсирует получение только строковых значений, нежели полного объекта
‌
Полная команда для получения первой свободной буквы диска в заданном диапазоне. Для краткости я заменил названия командлетов на их псевдонимы.
‌
dir function:[j-z]: -Name | where {!(Test-Path $_)} | select -First 1
‌
Этот метод должен быть самый быстрый, хотя разница всё равно измеряется долями секунды - в скрипте это не существенно. Тут скорее играет роль, что вы помните или быстрее вводите. На мой взгляд, вариант с диапазоном букв посложнее набирать.
‌
////
‌
Наконец, мне в комментариях к посту про mountvol подписчик Алексей доставлял, что все свободные буквы могут быть заняты разнообразными дисками. Хотя к тому моменту я уже добавил ссылку на статью блога с решением именно этой задачи - подключением диска в папку NTFS.
‌
Впрочем, это не сработает именно для раздела EFI! У mountvol ключ /s предусматривает только подключение в букву диска, потому что у EFI файловая система FAT32! В такой ситуации надо действовать в зависимости от требуемых изменений. Например, для файловых операций можно обойтись без подключения раздела, но для команд bcdedit логичнее освободить букву на время✌
👍28❤7🔥3👌1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91❤11🔥9🤣5👌1
😎 Дождь начнётся через около 2.5 ч. Но это не точно!

Этот #автоперевод Виталий скинул в чат с вопросом: "погоду тоже что ли ИИшкой переводили?"

Я думаю, дело здесь не в нейронках, а в отсутствии контекста при переводе. В оригинале скорее всего in about. И эти слова вполне могут быть представлены отдельной строкой (string). Потому что предшествующие им слова варьируются (снег начнётся, гроза закончится).

Дело осложняется ещё и тем, что фраза in about несколько разговорная. Она абсолютно допустима во множестве сфер, но в юридических или технических документах вы её вряд ли увидите. Там бы написали in approximately, И тогда перевод "в лоб" был бы лучше: через примерно. Хотя правильнее поменять эти слова местами.

Вырванные из контекста фразы сложно переводить хоть ИИ, хоть человеку. Я уже поднимал эту тему в посте о трудностях перевода ✌️
👍35🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍43❤6🔥6🤔3👌1🙈1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4❤2