
Лига Сисадминов
А давайте встроим ии в powershell
Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно, смотрите код на гитхабе.
Под аббревиатурой «ии» я подразумеваю модель машинного обучения. Я буду использовать gemini-2.5-pro/flash. У гугла есть интерфейс командной строки gemini-cli.
Что такое Gemini CLI?
Подробно о Gemini CLI я уже рассказывал в Gemini CLI: Знакомство и первые шаги. Но если вы ее пропустили, вот краткое введение.
Если коротко, Gemini CLI — это командная строка для взаимодействия с моделями ИИ от Google. Вы запускаете его в своем терминале, и он превращается в чат, который, в отличие от веб-версий, имеет доступ к вашей файловой системе.
Ключевые возможности:
Понимает код: Он может анализировать ваши скрипты, находить в них ошибки и предлагать исправления.
Генерирует код: Вы можете попросить его написать PowerShell-скрипт для решения вашей задачи, и он это сделает.
Работает с файлами: Может читать файлы, создавать новые, вносить изменения в существующие.
Запускает команды: Может выполнять команды оболочки, такие как git или npm.
Для наших целей самое важное то, что Gemini CLI умеет работать в неинтерактивном режиме. То есть мы можем передать ему промпт как аргумент командной строки, и он просто вернет нам ответ, не запуская свой интерактивный чат. Именно эту возможность мы и будем использовать.
Установка и настройка
Чтобы начать, нам нужно подготовить наше окружение. Это делается один раз.
Шаг 1: Установка Node.js Gemini CLI — это приложение, написанное на Node.js (популярная среда для JavaScript). Поэтому сначала нам нужно установить саму Node.js.
Перейдите на официальный сайт: https://nodejs.org/
Скачайте и установите LTS версию. Это самый стабильный и рекомендуемый вариант. Просто следуйте инструкциям установщика.
После установки откройте новое окно PowerShell и проверьте, что все работает:
node -v npm -v
Вы должны увидеть версии, например, v20.12.2 и 10.5.0.
Шаг 2: Установка самого Gemini CLI Теперь, когда у нас есть npm (менеджер пакетов для Node.js), установка Gemini CLI сводится к одной команде. Выполните ее в PowerShell:
npm install -g @google/gemini-cli
Флаг -g означает "глобальная установка", что сделает команду gemini доступной из любого места в вашей системе.
Шаг 3: Аутентификация В первый раз, когда вы запустите Gemini CLI, он попросит вас войти в свой аккаунт Google. Это нужно, чтобы он мог использовать вашу бесплатную квоту.
Просто введите в PowerShell команду:
gemini
Он задаст вам вопрос о входе. Выберите "Sign in with Google".
В вашем браузере откроется стандартное окно входа Google. Войдите в свой аккаунт и предоставьте необходимые разрешения.
После этого в консоли вы увидите приветственное сообщение от Gemini. Поздравляю, вы готовы к работе! Можете ввести /quit, чтобы выйти из его чата.
Философия PowerShell: ужасный Invoke-Expression
Прежде чем мы соединим все вместе, познакомимся с одним из самых опасных командлетов в PowerShell — Invoke-Expression, или его коротким псевдонимом iex.
Invoke-Expression берет текстовую строку и выполняет ее так, как будто это была команда, напечатанная в консоли.
Пример:
$commandString = "Get-Process -Name 'chrome'" Invoke-Expression -InputObject $commandString
Эта команда сделает то же самое, что и простой вызов Get-Process -Name 'chrome'.
Почему он опасный? Потому что выполнение строки, которую вы не контролируете (например, полученной из интернета или от ИИ), — это огромная дыра в безопасности. Если ИИ по ошибке или со злым умыслом вернет команду Remove-Item -Path C:\ -Recurse -Force, iex без раздумий ее выполнит.
Для нашей задачи — создания управляемого и контролируемого моста между запросом на естественном языке и его выполнением — он подходит идеально. Мы будем использовать его с осторожностью, полностью осознавая риски.
Соединяем всё вместе: командлет Invoke-Gemini
Напишем простую PowerShell-функцию, которая позволит нам отправлять промпты одной командой.
Давайте зададим ему вопрос на общую тему прямо из нашей PowerShell-консоли.
Invoke-Gemini -Prompt "Расскажи о пяти последних трендах в области машинного обучения"
Пробуем магию:
👏 Поздравляю! Вы только что успешно встроили ИИ в PowerShell.
В следующей статье я расскажу, как использовать Gemini CLI для запуска скриптов и автоматизации задач.
Ссылка на github
Серия «Философия PowerShell»
Серия «gemini-cli»
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀
Задачи имитационной безопасности в России
Для лиги лени: Ит-шники неправильно понимают бизнес задачи имитационной безопасности
Поскольку я по своему текущему месту работы занимаюсь и аудитом в части информационной безопасности, и продолжаю общаться с бывшими коллегами и заказчиками и онлайн, и (когда они прилетают) офлайн, то не мог не обратить внимание на появление в их жизни "театра безопасности", или "имитации безопасности".
Откуда это пошло.
В крупном бизнесе, действительно крупном и работающим с живыми деньгами – то есть банки, продажи, биржи – всегда были отделы физической безопасности и отделы информационной безопасности. Потому что деньги любят тишину, потому что простой стоит реальных денег и штрафов, итд. В этих местах всегда работали серьезные люди, с интересным жизненным опытом.
Года 3-4 назад по гос.структурам, и смежным с ними, началась волна «обязательного выделения специалиста по информационной безопасности». Приведшая к бюрократии в виде введения должности CISO (Chief Information Security Officer), и чтобы этот человек следил за безопасностью.
Причин такого внезапного внимания к ИБ, как мне кажется, было несколько.
Первая причина, достаточно очевидная. У работающих в «тяжелом» корпоративном секторе, энтерпрайзе, есть когнитивное искажение «мы ставим патчи, читаем всякие книжки по секурной секурности, и везде ставят, и читают, потому что как еще».
Потому что:
CIH, also known as Chernobyl or Spacefiller. 1998.
Conficker, also known as Downup, Downadup and Kido. 2008.
Кража $81 млн у ЦБ Бангладеш. 2016.
WannaCry ransomware attack. 2017.
SUNBURST – SolarWinds Orion. 2020
В Бразилии расследуется одна из крупнейших кибератак последних лет — из шести финансовых организаций было похищено около $140 млн. – 2025 год.
И сотни менее известных случаев, начиная от «все зашифровало», заканчивая «утекли данные, которые не стоило отдавать наружу».
Но в среднем и малом бизнесе до сих пор есть идеология «работает – не трогай», и обновления не ставятся годами. Точно так же, как есть идеология «кому мы нужны, мы же маленькие и незаметные».
Вторая причина менее очевидна. Это создание рабочих мест и продажа курсов «500 часов по ИБ».
500 часов – 12 недель – курсы на три месяца с выдачей грамоты. Что можно изучить за три месяца госкурсов ? Размазанные знания «обо всем» ?
Список тем:
Организационно-правовые основы технической защиты конфиденциальной информации. Средства и системы обработки информации.
(и так далее, кому надо – сами найдете).
Как итог, сотрудники «айти» неправильно понимают задачи отдела имитационной безопасности и отличия отдела имитации от отделов информационной безопасности.
С традиционной точки зрения, отдел информационной безопасности занимается чем-то, схожим с работой ИТ, то есть настройкой средств информационной безопасности, выявлением проблемных мест, итд. То есть работой со специализированными информационными системами.
Отдел же имитационной безопасности занимается задачами, сходными с задачами инженера по технике безопасности.
Это, если кто-то не в курсе:
Написание регламентов «не влезай – убьет» и «не стой под стрелой».
Обучением всех «не влезать под нагрузкой», подписями в журналах инструктажа, пожарной безопасности, электробезопасности, журналов допусков, и прочих «сам виноват».
Штрафами за не ношение перчаток, каски, очков, работ без выставления ограждений итд.
Инженер по технике безопасности сам не крутит гайку где-то на кране. Его задача проследить, чтобы на рубильнике крана висела табличка «не включать», сотрудник был в каске, итд.
Задача важная, каждый год находятся десятки людей, забывающих что ТБ написан не просто так.
Аналогично, отдел имитационной безопасности занимается:
Написанием регламентов «делай хорошее, плохое не делай». Не важно, можно ли делать хорошее, или нельзя – регламент должен быть. Не для работника, а для того, чтобы показывать регламент работнику, и контролирующим органам.
Обучением всех «не запускать неизвестное ПО с флешки», подписями в журналах инструктажа «я не буду запускать ПО из архивов», и прочими журналами «я знаю, что надо делать хорошо».
Сбором статистики нарушений «вот тут не сделано хорошо». При этом у сотрудника такого отдела имитации нет представления «что такое хорошо» за пределами регламента. Сказано – пароль не должен быть Pa$$word, значит Pa$$word нельзя. Не сказано, что Pa$$word1Pa$$word1 нельзя – значит, можно. Красная лампочка, зеленая лампочка.
Здравый смысл? Международные методики и мнение вендора? Аще па незначимо.
Задачи отдела имитационной безопасности сводятся не к устранению проблем, а в поиске виноватых в том, что настройки не проведены согласно регламента.
Наверное, но это не точно, можно предположить, что задачи этого отдела – перекладывание ответственности от не очень компетентного менеджмента на отдел ИТ. Не поставили обновления, не важно почему (нет людей, нет согласований, нет подписки на обновления, нет лицензий) – не важно. Вот регламент, вот ваши подписи по ознакомлению с регламентом, будьте добры выполнять.
Не установили какое-то ПО для имитации безопасности, например «Хрюканина 21 для рабочих групп», потому что Хрюканина 21 не работает на операционной системе «Aspera Нижние Васюки» - не важно. Вот регламент. Должны были поставить.
Хорошим индикатором отличия информационной безопасности от имитационной безопасности является публичный разбор причин, и обмен опытом.
Проверяем.
Взлом и простой облака МТС. Взлом был, простой был, обмена опытом не было.
Взлом и простой СДЭК. Взлом был, простой был, обмена опытом не было.
Взлом и простой Аэрофлот. Взлом был, простой был, обмена опытом не было.
Сбой CrowdStrike и Azure – инцидент был, меры приняты, виновные названы (хотя и не поименно). Некоторые критики считают, что это был самый жалкий разбор инцидента, о котором они слышали.
Заключение
Если на клетке слона прочтешь надпись: буйвол, — не верь глазам своим.
Имитационная безопасность, как и многое, не является тем, что на ней написано. Это не про безопасность и не про информацию. Это отдел по перекладыванию ответственности от бизнеса к исполнителям. Его задачи – это административные задачи, и такие задачи не могут быть решены техническими средствами.
Для тех, кто дочитал.
Существует, и иногда даже внедряется, процедура no-blame postmortem. Она не имеет отношения к размыванию ответственности в виде «никто конкретно не виноват», но позволяет вносить изменения в процедурах и процессах.
Тут сложно сравнивать Запад с РФ, потому что в РФ есть и внешняя имитация процессов, и внутреннее воспроизведение процессов. И на Западе имитацией обмазывались и обмазываются.
Много зависит от конкретных исполнителей и расстановки приоритетов. Достаточно много где (в РФ) есть рабочие процедуры и процессы, местами даже есть работающий надзор. Много где при этом ограничиваются не устранением причин, а переваливанием ответственности. Схожая ситуация «на западе», с размазыванием причин вместо устранения, напрямую зависит от числа Кумаров в коллективе.
Кто не в курсе, как это бывает у Кумаров, может загуглить "Бхопал".
Серия «Философия PowerShell». Полное руководство по ExifTool и PowerShell (Out-ConsoleGridView)
Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно, смотрите код на гитхабе.
Каждый раз, когда вы делаете фотографию, ваша камера записывает в файл не только само изображение, но и служебную информацию: модель камеры и объектива, дату и время съемки, выдержку, диафрагму, ISO, GPS-координаты. Эти данные называются EXIF (Exchangeable Image File Format).
Хотя PowerShell имеет встроенные средства для чтения некоторых метаданных, они ограничены. Чтобы получить доступ ко всей информации, нужен специализированный инструмент. В этой статье я использую ExifTool.
ExifTool — это бесплатная, кросс-платформенная утилита с открытым исходным кодом, написанная Филом Харви. Она является золотым стандартом для чтения, записи и редактирования метаданных в самых разных форматах файлов (изображения, аудио, видео, PDF и др.). ExifTool знает тысячи тегов от сотен производителей устройств, что делает его самым всеобъемлющим инструментом в своем классе.
Скачивание ExifTool и правильная настройка
Прежде чем писать код, нужно подготовить саму утилиту.
Зайдите на официальный сайт ExifTool: https://exiftool.org/. На главной странице найдите и скачайте "Windows Executable".
Переименование (Критически важный шаг!): Скачанный файл будет называться exiftool(-k).exe. Это не случайность, а специальная функция для удобства пользователей, которые работают с программой через графический интерфейс Windows, а не через командную строку.
Переименуйте его в exiftool.exe, чтобы отключить режим "паузы", который предназначен для пользователей, запускающих программу двойным щелчком мыши. Когда вы запускаете программу из скрипта, PowerShell ожидает, что она выполнит свою задачу, вернет результат (текст, данные) и завершится. Режим с паузой (-k) нарушает этот процесс
Хранение: У вас есть два основных варианта, где хранить exiftool.exe.
Вариант 1 (Простой): В той же папке, что и ваш скрипт. Это самый легкий путь. Ваш скрипт PowerShell всегда сможет найти утилиту, так как она лежит рядом. Идеально для портативных скриптов, которые вы переносите с компьютера на компьютер.
Вариант 2 (Рекомендуемый для частого использования): В папке из системной переменной PATH. Переменная PATH — это список директорий, где Windows и PowerShell автоматически ищут исполняемые файлы. Вы можете создать папку (например, C:\Tools), положить туда exiftool.exe и добавить C:\Tools в системную переменную PATH. После этого вы сможете вызывать exiftool.exe из любой папки в любой консоли.
скрипты для добавления в $PATH:
Добавление директории в PATH для ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ
Добавление директории в СИСТЕМНЫЙ PATH для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ
PowerShell и внешние программы
Чтобы эффективно использовать ExifTool, нужно знать, как PowerShell запускает внешние .exe файлы. Правильный и самый надежный способ запуска внешних программ — это оператор вызова & (амперсанд). PowerShell выдаст ошибку в случае, если путь к программе содержит пробелы. Например, C:\My Tools\exiftool.exe. & (амперсанд)** говорит PowerShell: "Текст, который следует за мной в кавычках, — это путь к исполняемому файлу. Запусти его, а всё, что идет дальше, — это его аргументы".
# Правильный синтаксис
> & "C:\Path With Spaces\program.exe" "аргумент 1" "аргумент 2"
Всегда используйте &, когда работаете с путями к программам в переменных или путями, которые могут содержать пробелы.
ExifTool + PowerShell
Теперь объединим наши знания.
Пример №1: Базовое извлечение и интерактивный просмотр
Самый простой способ получить все данные из фото и изучить их — это запросить их в формате JSON и передать в Out-ConsoleGridView (ogv).
Путь к фото
> $photoPath = "E:\photos\1234.png"
1. Запускаем exiftool с ключом -json для структурированного вывода
2. Преобразуем JSON-текст в объект PowerShell
Вызываем exiftool.exe напрямую, без переменной и оператора вызова &.
> $exifObject = exiftool.exe -json $photoPath | ConvertFrom-Json
3. Превращаем "широкий" объект в удобную таблицу "Параметр-Значение"
> $reportData = $exifObject.psobject.Properties | Select-Object Name, Value
4. Выводим результат в интерактивное окно для анализа
> $reportData | Out-ConsoleGridView -Title "Метаданные файла: $($photoPath | Split-Path -Leaf)"
Этот код откроет интерактивное окно, где вы сможете отсортировать данные по имени параметра или значению, а также отфильтровать их, просто начав вводить текст. Это невероятно удобно для быстрого поиска нужной информации.
Пример №2: Создание чистого отчета и отправка на разные "устройства"
Out-ConsoleGridView — это только начало. Вы можете направить обработанные данные куда угодно, используя другие командлеты Out-*.
Предположим, у нас есть данные в переменной $reportData из предыдущего примера.
А) Отправка в CSV-файл для Excel
Создаем директорию Reports:
> New-Item -Path "C:\Reports" -ItemType Directory
Сохраняем CSV
> $reportData | Export-Csv -Path "C:\Reports\photo_exif.csv" -NoTypeInformation -Encoding UTF8
В) Отправка в буфер обмена
Хотите быстро вставить данные в письмо или чат? Используйте Out-Clipboard.
> $reportData | Format-Table -AutoSize | Out-String | Out-Clipboard
Теперь вы можете нажать `Ctrl+V` в любом текстовом редакторе и вставить аккуратно отформатированную таблицу.
Пример №3: Получение конкретных данных для использования в скрипте
Часто вам не нужен весь отчет, а лишь одно или два значения. Поскольку $exifObject — это обычный объект PowerShell, вы можете легко обращаться к его свойствам.
Пример №4: Пакетное извлечение метаданных из папки
Иногда нужно проанализировать не одно фото, а целую папку с изображениями.
Пример №5: Рекурсивный поиск по подпапкам
ExifTool умеет сам искать файлы во всех подпапках при использовании ключа -r.
Пример №6: Переименование файлов по дате съемки
Это один из самых популярных сценариев автоматизации — файлы получают имена по дате/времени съемки.
> $exifToolPath = "C:\Tools\exiftool.exe" $photoFolder = "D:\Photos" # Переименуем в формат YYYY-MM-DD_HH-MM-SS.jpg & $exifToolPath -r -d "%Y-%m-%d_%H-%M-%S.%%e" "-FileName<DateTimeOriginal" $photoFolder
💡 ExifTool подставит расширение исходного файла автоматически через %%e.
Пример №7: Извлечение только GPS-координат
Полезно, если вы хотите построить карту по вашим фото.
Пример №8: Массовое удаление всех GPS-данных (для приватности)
# Удалим все GPS-теги из JPG и PNG
> & $exifToolPath -r -overwrite_original -gps:all= "D:\Photos"
💡 Это действие необратимо, поэтому делайте бэкап перед выполнением.
Пример №9: Конвертация времени съемки в местное время
Иногда фото сняты в другом часовом поясе. ExifTool может сместить дату.
# Смещаем время на +3 часа
> & $exifToolPath "-AllDates+=3:0:0" "D:\Photos\IMG_*.JPG"
Пример №13: Копирование метаданных с одного файла на другой
Пример №14: Сохранение исходных метаданных в отдельный JSON перед изменением
> $backupPath = "C:\Reports\metadata_backup.json" & $exifToolPath -r -json "D:\Photos" | Out-File -Encoding UTF8 $backupPath
Пример №15: Использование PowerShell для автоматической сортировки фото по дате
Пример 16: Поиск всех уникальных моделей камер в коллекции
Хотя это можно сделать одной строкой, вывод в GridView позволяет сразу скопировать нужное название модели.
Ключ -s3 выводит только значения, -Model - название тега
> $uniqueModels = & exiftool.exe -r -Model -s3 "D:\Photos" | Sort-Object -Unique
Выводим в GridView для удобного просмотра и копирования
> $uniqueModels | Out-ConsoleGridView -Title "Уникальные модели камер в коллекции"
Статья на github
Еще по теме Out-ConsoleGridView:
Философия PowerShell. Часть 4. Интерактивная работа: Out-ConsoleGridView
Серия «Философия PowerShell». Практические примеры использования Out-ConsoleGridView
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀
Серия «Философия PowerShell». Практические примеры использования Out-ConsoleGridView
В предыдущей части мы познакомились с Out-ConsoleGridView — мощным инструментом для интерактивной работы с данными прямо в терминале. Если вы не знаете, что такое Out-ConsoleGridView, рекомендую начать отсюда 👉 Интерактивная работа: Out-ConsoleGridView
Я не буду повторять теорию, а сразу перейду к практике и покажу 10 сценариев, в которых этот командлет может сэкономить системному администратору или продвинутому пользователю массу времени.
Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно смотрите код на гитхабе
Out-ConsoleGridView — это не просто "просмотрщик". Это интерактивный фильтр объектов в середине вашего конвейера.
Предварительные требования:
PowerShell 7.2 или новее.
Установленный модуль Microsoft.PowerShell.ConsoleGuiTools. Если вы его еще не установили:
> Install-Module Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
Пример 1: Интерактивная остановка процессов
> # Выбираем процессы в интерактивном режиме
> $procsToStop = Get-Process | Sort-Object -Property CPU -Descending | Out-ConsoleGridView -OutputMode Multiple
> # Если что-то было выбрано, передаем объекты на остановку
> if ($procsToStop) {
$procsToStop | Stop-Process -WhatIf
}
Get-Process получает все запущенные процессы.
Sort-Object упорядочивает их по загрузке CPU, чтобы самые "прожорливые" были наверху.
Out-ConsoleGridView отображает таблицу. Вы можете ввести chrome или notepad, чтобы мгновенно отфильтровать список, и выбрать нужные процессы клавишей Space.
После нажатия Enter выбранные объекты процессов попадают в переменную $procsToStop и передаются в Stop-Process.
Пример 2: Управление службами Windows
Нужно быстро перезапустить несколько служб, связанных с одним приложением (например, SQL Server).
> $services = Get-Service | Out-ConsoleGridView -OutputMode Multiple -Title "Выберите службы для перезапуска" if ($services) { $services | Restart-Service -WhatIf }
Вы получаете список всех служб.
Внутри Out-ConsoleGridView вы вводите в фильтр sql и сразу видите все службы, относящиеся к SQL Server.
Выбираете нужные и нажимаете Enter. Объекты выбранных служб передаются на перезапуск.
Пример 3: Очистка папки "Загрузки" от больших файлов
Со временем папка "Загрузки" забивается ненужными файлами. Найдем и удалим самые большие из них.
Мы получаем все файлы, сортируем их по размеру и с помощью Select-Object создаем удобную колонку SizeMB.
В Out-ConsoleGridView вы видите отсортированный список, где легко выбрать старые и большие .iso или .zip файлы.
После выбора их полные пути передаются в Remove-Item.
Пример 4: Добавление пользователей в группу Active Directory
Вместо того чтобы вручную вводить имена пользователей, вы получаете удобный список, где можете быстро найти и выбрать нужных сотрудников по фамилии или логину.
Пример 5: Узнать, какие программы используют интернет прямо сейчас
Одна из частых задач: "Какая программа тормозит интернет?" или "Кто и куда отправляет данные?". С помощью Out-ConsoleGridView можно получить наглядный ответ.
> # Получаем все активные TCP-подключения
> $connections = Get-NetTCPConnection -State Established | Select-Object RemoteAddress, RemotePort, OwningProcess, @{Name="ProcessName"; Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}}
> # Выводим в интерактивную таблицу для анализа
> $connections | Out-ConsoleGridView -Title "Активные интернет-подключения"
Get-NetTCPConnection -State Established собирает все установленные сетевые подключения.
С помощью Select-Object мы формируем удобный отчет: добавляем имя процесса (ProcessName) к его ID (OwningProcess), чтобы было понятно, какая программа установила соединение.
Out-ConsoleGridView показывает вам живую картину сетевой активности.
Пример 6: Анализ установки ПО и обновлений
Мы будем искать события от источника "MsiInstaller". Он отвечает за установку, обновление и удаление большинства программ (в формате .msi), а также за многие компоненты обновлений Windows.
Внутри таблицы: Вы можете отфильтровать список по названию программы (например, Edge или Office), чтобы увидеть всю историю ее обновлений. Вы можете отсортировать по Id, чтобы найти неудачные установки (11708).
Внутри таблицы:
Вы можете отфильтровать список по названию программы (например, Edge или Office), чтобы увидеть всю историю ее обновлений.
Вы можете отсортировать по Id, чтобы найти неудачные установки (11708).
Пример 7: Интерактивное удаление программ
Вы получаете список всего установленного ПО. В интерфейсе вы можете легко найти и выбрать несколько программ для удаления.
Пример 8: Связывание (Chaining) Out-ConsoleGridView
Это самый мощный прием. Выход одной интерактивной сессии становится входом для другой. Задача: Выбрать одну из ваших папок с проектами, а затем выбрать из нее определенные файлы для создания ZIP-архива.
Первый Out-ConsoleGridView показывает вам список папок внутри ваших "Документов". Вы можете быстро найти нужную, введя часть ее имени, и выбрать одну папку.
Если папка была выбрана, скрипт немедленно открывает второй Out-ConsoleGridView, который показывает уже файлы внутри этой папки.
Вы выбираете один или несколько файлов клавишей Space и нажимаете Enter.
Скрипт берет выбранные файлы и создает из них ZIP-архив на вашем рабочем столе.
Это превращает сложную многошаговую задачу (найти папку, найти в ней файлы, скопировать их пути, запустить команду архивации) в интуитивно понятный интерактивный процесс из двух шагов.
Пример 9: Управление опциональными компонентами Windows
Вы можете легко найти и отключить ненужные компоненты, например Telnet-Client или Windows-Sandbox.
Пример 10: Управление виртуальными машинами Hyper-V
Быстро остановить несколько виртуальных машин для обслуживания хоста.
Статья на github
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀
Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть седьмая из многих
Для лиги лени: общеизвестное и душное.
Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
13 августа 2025 года вышло обновление Proxmox до 9.0.5
было pve-manager/9.0.3/025864202ebb6109 (running kernel: 6.14.8-2-pve)
стало pve-manager/9.0.5/9c5600b249dbfd2f (running kernel: 6.14.8-2-pve)
Но искать «что там было обновлено», это тот еще процесс.
То есть:
Вот большая статья: вышла версия 9, Proxmox Virtual Environment 9.0 with Debian 13 released
Вот Git с фиксами.
После обновления до 9.0.5, внезапно появился
/etc/apt/sources.list.d/pve-enterprise.sources
да и ладно
У Broadcom VMware все проще – вот патч (сейчас официально только по подписке), вот компоненты в нем.
У Microsoft все еще проще – вот MicrosoftUpdate Catalog. Если выходят бесплатные обновления (для 2012 и 2012R2 – только платные, нужна подписка Extended Security Updates (ESU) for Windows Server, для 2008 нужна подписка premium assurance. Но обновления выходят, например:
2025-08 Security Monthly Quality Rollup for Windows Server 2008 R2 for x64-based Systems (KB5063947)
Поэтому можно сходить на
http://download.proxmox.com/debian/pve/dists/bookworm/pve-no...
http://download.proxmox.com/debian/pve/dists/trixie/
Скачать там файл
http://download.proxmox.com/debian/pve/dists/trixie/pve-no-s...
И увидеть, цитата
Package: pve-manager
Maintainer: Proxmox Support Team support@proxmox.com
Installed-Size: 3573
Provides: vlan, vzdump
Depends: apt (>= 1.5~), ..
Recommends: proxmox-firewall, proxmox-offline-mirror-helper, pve-nvidia-vgpu-helper
Conflicts: vlan, vzdump
Breaks: libpve-network-perl (<< 0.5-1)
Replaces: vlan, vzdump
Filename: dists/trixie/pve-no-subscription/binary-amd64/pve-manager_9.0.5_all.deb
Size: 580388
Окей, а как-то поудобнее можно?
Конечно после обновления можно увидеть:
cat /var/log/apt/history.log
Но это после обновления.
Очень, очень не хватает решения типа Windows Server Update Services (WSUS), но для Linux и Proxmox. Foreman+Katello говорят «ок». RedHat Satellite ? SpaceWalk:Satellite ?
Разница концепций. Часть 7.2 Сети
В ESXi «из коробки» все просто. Есть стандартный свитч, vSphere Standard Switch, vSS. Он мало чего умеет «из коробки», но самое главное, что вы можете завести несколько коммутаторов, и распределять физические порты сетевых карт, и порты виртуальных сервисов – самого менеджмента, сервисов, итд, как вам нравится.
Вместе с некоторыми (их опять поменяли) лицензиями вы получали vSphere Distributed Switch (VDS), с дополнительными функциями.
Если хотите добавить в жизнь интима - Single Root I/O virtualization (SR-IOV).
Хотите чего-то большего – покупайте VMware NSX.
У Microsoft в чем-то схожий подход. Есть Hyper-V switch с массой настроек исключительно из powershell.
Хотите большего – добро пожаловать в увлекательный мир Network Controller Server Role.
Хотите того же самого, но иначе – вот вам Set up networking for Hyper-V hosts and clusters in the VMM fabric, вот вам Set up logical networks in the VMM fabric, и вперед.
У Proxmox все немного не так. То есть, так то так, архитектура та же, x86, но.
За уровень «стандартного коммутатора» отвечает стандартный функционал Linux. Проблема в том, что он (как, впрочем, и в Broadcom, и в Microsoft) читаемо и полноценно настраивается только из командной строки. Режима Switch Embedded Teaming (SET) в нем нет, есть active-active bond, но.
Red Hat пыталась сделать что-то такое же, и даже статья есть - 8.3. Comparison of Network Teaming to Bonding, но это Red Hat.
Чтобы в этом разбираться, все равно необходим базовый уровень знания сети, в масштабе CCNA: Switching, Routing, and Wireless Essentials, он же CCNA Routing & Switching ICND1 100-105 Course. Иначе вопросов будет больше, чем ответов. У Broadcom есть best practice – собирайте actve-active, LACP не нужен. Если вы упрт нркмн, то вот вам beacon probe и shotgun mode, можете упртс. Если хотите совсем упртс, то вот вам air-gap storage fabric, только лучше бы вы так не делали.
У Microsoft есть best practice – просто ставьте SET, он сам разберется.
У proxmox, их-за наличия Bridge, который по сути L2 switch, и iptables, появляется L3 конфигурация с NAT, но планирование сети заставляет каждый раз думать «как лучше-то».
Кроме того, в конфигурации сети отдельно английским по белому написано:
For the cluster network (Corosync) we recommend configuring it with multiple networks. Corosync does not need a bond for network redundancy as it can switch between networks by itself, if one becomes unusable. Some bond modes are known to be problematic for Corosync, see Corosync over Bonds.
Особенно мне понравилась строчка:
We recommend at least one dedicated physical NIC for the primary Corosync link
То есть, поскольку сетевые карты нынче идут, чаще всего, с двумя портами, то надо брать 2 карты по 2 порта, всего 4 порта, и один порт выделять под Corosync. Но если у меня конфигурация нормального человека, 2 порта по 25, это мне что, под кластер надо выделять целых 25G? А не жирновато?
При этом сценарии отказа описаны понятно и обоснованно, но как-то заставляют задуматься. Это же придется ставить на мониторинг не только состояние порта on\off\ CRC, но и, для оптики, уровень сигнала по SFP модулям с обеих сторон, RX power \ TX power.
Середины (типа vSphere Distributed Switch (VDS)) нет.
Зато есть SDN
От теории к практике.
Поскольку для этой серии статей у меня Proxmox развернут как вложенная (nested) виртуализация, то мне придется или переделать всю сеть, или пересобирать рабочие стенды, или ограничиться двумя виртуальными сетевыми картами.
К моему величайшему отвращению, Hyper-V Windows 11 'Default Switch' зачем-то снабжен никак нормально не настраиваемым DHCP сервером. В Server 2012\2016\2019\2022\2025 такого нет, если нет DHCP в сети, значит нет сети.
Конфигурация хоста Hyper-V:
Get-VMSwitch 'Default Switch' | fl – от этого виртуального свича все отключено.
Вот он мне и вредил, поскольку в нем и NAT и DHCP , и ничего в нем не настраивается, согласно Change Hyper-V (Default Switch) IP address range.
The Hyper-V Default Switch will randomly use one these IP address ranges based on the host system IP address:
Start IP: 192.168.0.0 – End IP: 192.168.255.255
Start IP: 172.17.0.0 – End IP: 172.31.255.255
Поэтому я новый виртуальный свитч и сделал, режим external. И все у него хорошо.
Конфигурация proxmox по умолчанию
auto lo
iface lo inet loopback
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.10.202/24
gateway 192.168.10.1
bridge-ports eth0
bridge-stp off
bridge-fd 0
Конфигурация с двумя виртуальными сетевыми картами у меня будет выглядеть так:
auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manualauto bond0
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode active-backup
bond-xmit-hash-policy layer2+3
auto vmbr0iface vmbr0 inet static
address 192.168.10.202/24
gateway 192.168.10.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
Конфигурация с VLAN для рабочих сред описана в разделе Example: Use VLAN 5 for the Proxmox VE management IP with VLAN aware Linux bridge, конфигурация The next example is the same setup but a bond is used to make this network fail-safe.
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Чтобы понимать незначительные сложности, нужно немного отойти назад, в состояние «дисковых пространств» 15-20 лет назад, и огромный скачок для всего человечества за последние пять лет.
15 назад, в 2010 году, концепция дисковых пространств была достаточно проста.
Есть одиночные локальные диски, которые могут быть включены по IDE (уже крайне редко на тот момент), SATA, SCSI и SAS. Но интерфейс особого значения не имеет (то есть, еще как имеет, но это другая история), потому что глобально выбора конфигурации особо и нет.
Для домашней и офисной техники: 1 диск, без всяких массивов.
Для дисков с операционной системой: аппаратный RAID 1 (зеркало) из 2 дисков. Не надо забывать, что диски тогда были маленькими, как 72GB 2.5-inc SFF 3G Single Port SAS 10K, 146GB SCSI U320 или 146GB hot-plug Serial Attached SCSI (SAS).
Для дисков с данными для «быстрого» доступа: аппаратный RAID 10.
Для дисков с данными для «медленного» доступа: аппаратный RAID 5, если у вас диски меньше 1 терабайта, аппаратный RAID 6, если у вас диски больше 1 терабайта.
Потому что, запишите это уже большими буквами: RAID 5 на дисках бытового и начально-корпоративного сегмента, при размере одиночного диска больше 1 Тб, достаточно часто умирает при стандартном ребилде. Вероятности считайте сами.
Плюс локально включенные коробки с дисками.
И, для дисковых массивов, у вас есть FC 4g (c 2004), FC 8g (с 2008), и с 2007 года есть 10G Ethernet для iSCSI. 25G Ethernet появится только в 2018 году.
NFS поверх 1\10G, конечно, тоже уже есть. Apple File Service (AFS) еще не умер.
Современные технологии быстрого перестроения массивов уже почти есть в HPE Eva.
Еще есть InfiniBand, но дорого.
Основная проблема – ребилд. Это долго, это дорого с точки зрения потери производительности, но это зачастую проще, чем переставлять ОС или поднимать данные из архивов. Поэтому везде RAID 1\10 и еще раз RAID. Альтернативы были, но все равно, RAID это было просто, понятно, наглядно, и не требует вмешательства администратора, особенно если есть запасной диск.
Сейчас все поменялось.
Окончательно ушли в историю диски на 15.000 и 10.000 оборотов, и та же судьба уже видна для дисков 7200 для массивов, и для дисков 5400 для ноутбуков. SSD с двумя оставшимися вариантами подключения, SAS и NVME, побеждают почти везде.
Появились технологии для гиперскейлеров, и не только – S2D, vSAN (StarWind дано был). И то, и другое, уже не redundant array of inexpensive disks, а Redundant Array of Independent Nodes (RAIN) .
Сети стали быстрее, диски быстрее, объемнее, и возникает другой вопрос – старые RAID контроллеры перестали справляться с производительностью новых дисков. Новые RAID контроллеры тоже не блещут при работе с NVME, но это уже другая история:
NVME Raid – We Need To Go Deeper, или что там на глубине. GPU over NVME, с водяным охлаждением
Проблема даже не в этом, а в том, что нет смысла держать разные диски на передней панели «под ОС и «под данные», с точки зрения работы, закупок, и в целом. Удобнее использовать один тип дисков, и никто не перепутает. В таком случае проще поставить или PCIe карту на 2 m.2 планки, или взять internal M.2 boot module или что-то типа Dell BOSS, собрать недоаппаратный или программный рейд на такой карте, и отдать остальные одинаковые диски, установленные в передние слоты, под данные, собрав тот или иной вид программного рейда.
НО.
Дальше начинаются «проблемы legacy 2.0».
В корпоративном варианте заказчику, за очень дорого, продадут и S2D и vSAN, со всеми их свистелками, типа быстрого перестроения при сбое, RAID 5+6, поддержке RDMA. Продадут со свичами Arista или Mellanox с их скоростями и cut-through (вместо Store-and-Forward), и lossless Ethernet, и так далее. Это все есть, это все работает, как и последние навороты в MPIO для IP в NVIDIA ConnectX-8 .
Это все есть, но это: 1) дорого 2) требует настройки 3)требует переписать драйвера 4)требует настроить сеть и следить за ней.
В то же время, существуют, как продукты, Ceph и drbd, то есть Linstor. И не только.
Они работают, но. Но настройка, скорость работы (задержки, и как следствие IOPS), проблемы связности, проблемы на ребилде, пожирание памяти как не в себя, и так далее.
В домашней лаборатории, где все работает, а отказ или split brain или остановка сервисов не важны – CEPH работает.
В масштабах VK – тоже работает, вопрос какой ценой.
Ceph вырос как проект 2007 года, времен медленных дисков небольшого объема, отсутствия на рынке «дешевого» варианта собрать хранилище на петабайт и больше, и даже работал, но в 2020 - 2021 году начал уходить с рынка. SUSE отказалась от развития, еще кто-то отказывался. FUJITSU Storage ETERNUS CD10000 S2 - The sale of this product was terminated in December 2019.
Причины понятны, сейчас петабайт хранения требует не двух стоек, а двух юнитов в одной стойке, а рынок опять меняется.
Поэтому Ceph для дома – пожалуйста, Ceph для VK облака или каких-то еще облаков – сколько угодно. Ceph для SMB или чуть выше – не знаю, зачем настолько жертвовать производительностью и иметь бонусом головную боль при обновлениях. И еще один не очевидный многим нюанс ниже.
Но люди верят, что он работает (это почти правда, если не рассматривать ребилд), быстрый (нет), надежный (очень не всегда). Вопрос цены. Люди верят, что можно обмануть систему, взять бесплатное решение, дешевых людей, дешевое железо и получить производительность и надежность «как в облаке, но дешевле».
Кроме того, есть вопросы и к бекапу, и к восстановлению, и много к чему еще.
Но люди верят. Мерять производительность не хотят, тесты ребилда под нагрузкой делать не хотят, некоторые и бекапы не делают.
Сложность и нюансы в понимании (и отсутствии понимания) «зачем все это».
Для одного сервера все равно нужен какой-то RAID, в современных условиях, для одного сервера, с таким бизнесом, которому достаточно одного сервера, может быть аппаратный контроллер и будет неплохим решением. Для двух серверов уже может быть проще собрать отказоустойчивый кластер не на уровне железа и репликации средствами ОС, а через репликацию сервиса. Базы данных это умеют, для репликации файловых кластеров с низкой нагрузкой подойдет что угодно, остальные сервисы типа etcd тоже реплицируются без кластерной файловой системы.
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Для Hyper-V все проще некуда. Собрал диски – хочешь в soft raid, хочешь в storage space (не путать с S2D), хочешь на аппаратном рейде. Отформатировал, создал тонкие или толстые виртуальные тома ОС, создал на них тонкие (динамические) или толстые файлы (vhdx), отдал файлы виртуальным машинам, и все.
Есть проблемы с производительностью storage space в parity, если вдруг не читали вот это.
Новый ноутбук: скорость, плюсы-минусы, DiskSPD, Hyper-V и продолжение про методику тестирование скорости
Устроено все проще некуда, диск виртуальной машины == файл с заголовком.
Для Broadcom ESXi все еще проще. Создал «на чем есть» storage, создал виртуальные машины с нужными дисками.
Устроено все проще некуда, диск виртуальной машины == 2 файла. Файл с текстовым описанием, и файл с RAW данными.
Для Proxmox начинается проблема выбора: что взять. Есть Ext4, есть ZFS, есть BTRFS. Есть XFS.
Был GlusterFS, но он все, цитата
As GlusterFS is no longer maintained upstream, Proxmox VE 9 drops support for GlusterFS storages. Setups using GlusterFS storage either need to move all GlusterFS to a different storage, or manually mount the GlusterFS instance and use it as a Directory storage. Roadmap
ПОМЕР.
Development has effectively ended. For years Red Hat drove development for its RHGS product, but with the EOL of RHGS at the end of 2024. Date: 2024-06-25
Само разбиение дисков сделано странно.
ISO images в GUI это /var/lib/vz/template/iso
CT templates в GUI это /var/lib/vz/template/cache
Конфигурация контейнеров /etc/pve/lxc
Конфигурация виртуальных машин /etc/pve/qemu-server
Диски виртуальных машин – о, тут все странно. В конфиге диск прописан как
scsi0: local-lvm:vm-100-disk-0,iothread=1,size=5G
но это блочный lvs том, который виден по команде lvs , или
find /dev | grep vm
И получаем /dev/pve/vm-100-disk-0
или команда
lvdisplay
покажет что где и как.
Неприятно с точки зрения операций с локальными томами. С ZFS та же история.
Разница концепций. Часть 7.5 «Локальное дисковое пространство - добавление».
Окей, создам отдельный том
New-VHD -Path C:\test\Proxmox\ data.vhdx -LogicalSectorSize 4KB -PhysicalSectorSizeByte 4KB -SizeBytes 105GB -Dynamic
добавлю его через GUI к Proxmox, но это уже будет другая история
Литература
Single Root I/O virtualization (SR-IOV)
Set up networking for Hyper-V hosts and clusters in the VMM fabric
Set up logical networks in the VMM fabric
How to configure System Center VMM Part 1 – Basic Design
8.3. Comparison of Network Teaming to Bonding
3.18. Bridge and Bond Configuration
Proxmox Network Configuration
How to enable DHCP on Hyper-V switch
Hyper-V - Default Switch & DHCP Server
Configuring VM Networking on a Hyper-V NAT Switch
A Practical Guide to Hyper-V Virtual Switch Configuration
Change Hyper-V (Default Switch) IP address range
Proxmox Ebook Free Download for Home Labs – тут почему-то удалили pdf, но он есть тут, хотя он и для 7.1
Proxmox for Everyone: Your Complete Guide to Virtualization, Kubernetes, and Homelab Automation (Next-Gen Infrastructure Strategies Book 2) Kindle Edition by da li (Author), PlanB Mr (Author)