А давайте встроим ии в 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»
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀
Серия «Философия 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
Полезно? Подпишись.
Понравилось — ставь «+»
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀
Философия PowerShell. Часть 4. Интерактивная работа: Out-ConsoleGridView
В первой части мы определили два ключевых понятия powershell: конвейер и объект.
Во второй части я рассказал как объекты взаимодействуют через переменные и конвейер.
В третьей части познакомились с файловой системой и провайдерами.
Сегодня рассмотрим интерактивную работу с данными в консоли.
Дисклеймер. На пикабу нет редактора кода, поэтому картинки и кривое форматирование. В конце поста я размещу ссылки на статью и исходники в github. Приятного чтения.
Out-ConsoleGridView. GUI в консоли PowerShell.
❗ Важно: Все описываемые ниже инструменты требуют PowerShell 7.2 или новее.
Out-ConsoleGridView — это интерактивная таблица, прямо в консоли PowerShell, позволяющая:
просматривать данные в виде таблицы;
фильтровать и сортировать колонки;
выбирать строки курсором — для передачи их дальше по конвейеру.
и многое другое.
Out-ConsoleGridView является частью модуля Microsoft.PowerShell.ConsoleGuiTools. Для его использования сначала нужно установить этот модуль.
Для установки модуля выполните следующую команду в PowerShell:
Install-Module Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
Install-Module загружает и устанавливает указанный модуль из репозитория в систему. Аналоги: pip install в Python и npm install в Node.js.
📎 Ключевые параметры Install-Module
После установки вы можете передавать любой вывод в Out-ConsoleGridView для интерактивной работы.
# Классческий пример: вывод списка процессов в интерактивную таблицу:
> Get-Process | Out-ConsoleGridView
Интерфейс:
Фильтрация: Просто начните вводить текст, и список будет отфильтрован на лету.
Навигация: Используйте клавиши-стрелки для перемещения по списку.
Выбор: Нажмите Space для выбора/снятия выделения с одного элемента.
Множественный выбор: Ctrl+A для выбора всех элементов, Ctrl+D для снятия всего выделения.
Подтверждение: Нажмите Enter, чтобы вернуть выбранные объекты.
Отмена: Нажмите ESC, чтобы закрыть окно без возврата данных.
Что умеет Out-ConsoleGridView:
Отображать табличные данные прямо в консоли в виде интерактивной таблицы с навигацией по строкам и столбцам.
Сортировать столбцы по нажатию клавиш.
Фильтровать данные с помощью поиска.
Выбирать одну или несколько строк с возвратом результата.
Работать в чистой консоли без GUI-окон.
Поддерживать большое количество строк с прокруткой.
Поддерживать различные типы данных (строки, числа, даты и пр.).
Примеры использования Out-ConsoleGridView
Базовое использование — показать таблицу с возможностью интерактивного выбора. (checkbox)
Выводится список процессов в интерактивной консольной таблице. Можно фильтровать по имени, сортировать столбцы и выбирать процессы. Выбранные процессы возвращаются в переменную $selected.
Выбор одной строки с обязательным возвратом результата. (radio)
$choice = Get-Service | Select-Object -First 20 | Out-ConsoleGridView -Title "Select a service" -OutputMode Single Write-Host "You selected service: $($choice.Name)"
Пользователь выбирает одну строку. -OutputMode Single запрещает выбирать несколько.
Интерактивное управление процессами:
Вы можете выбрать несколько процессов для остановки. Параметр -OutputMode Multiple указывает, что мы хотим вернуть все выбранные элементы.
Выбор файлов для архивации:
Выбор одного элемента для детального анализа:
Паттерн "Drill-Down" — от общего списка к деталям с Out-ConsoleGridView
Часто при работе с системными объектами мы сталкиваемся с дилеммой:
Если запросить все свойства для всех объектов (Get-NetAdapter | Format-List *), вывод будет огромным и нечитаемым.
Если показать краткую таблицу, мы потеряем важные детали.
Иногда попытка получить все данные сразу может привести к ошибке, если один из объектов содержит некорректные значения.
Решение этой проблемы — паттерн "Drill-Down" (детализация). Его суть проста:
Шаг 1 (Обзор): Показать чистый, краткий и безопасный список элементов для выбора.
Шаг 2 (Детализация): После того как пользователь выбрал один конкретный элемент, показать ему всю доступную информацию именно по этому элементу.
Практический пример: Создание обозревателя сетевых адаптеров
Задача: Сначала показать краткий список сетевых адаптеров. После выбора одного из них, открыть второе окно со всеми его свойствами.
Готовый код:
Информация о системе.
код скрипта для получения информации о системе: Get-SystemMonitor.ps1
Создание командлета 'Get-SystemMonitor'
Шаг 1: Настройка переменной PATH
Создайте постоянную папку для ваших инструментов, если еще не сделали этого. Например: C:\PowerShell\Scripts
Поместите ваш файл Get-SystemMonitor.ps1 в эту папку.
Добавьте эту папку в системную переменную PATH,
Шаг 2: Настройка псевдонима (alias) в профиле PowerShell
Откройте ваш файл профиля PowerShell:
notepad $PROFILE
Добавьте в него следующую строку:
Set-Alias -Name sysmon -Value "Get-SystemMonitor.ps1"
где sysmon - псевдоним командлета Get-SystemMonitorЕсли вы когда-нибудь переместите папку C:\PowerShell\Scripts, вам нужно будет обновить только переменную PATH, а ваш файл профиля останется без изменений.
Перезапустите PowerShell
Закройте все открытые окна PowerShell и откройте новое. Это необходимо, чтобы система применила изменения как в переменной PATH, так и в вашем профиле.
Код скрипта для установки C:\PowerShell\Scripts в PATH: Add-Path.ps1
Запуск:
Get-SystemMonitor
или конкретный ресурс:
Get-SystemMonitor -Resource users
Реализованы cpu, memory, system, network, users, peripherals
🤝 Поздравляю. Вы создали первый командлет.
Пост на github
Полезно? Подпишись.
Понравилось — ставь «+»
Задавайте вопросы в комментариях 👇👇👇
Удачи! 🚀
Что-то непонятное с ноутом
При включении ноутбука прыгает экран, как до загрузки Windows так и после, в середине видео нажимаю кнопку "Пуск" на клавиатуре.
Первый раз с таким встречаюсь, что с ноутбуком, кто сталкивался?
потом, при повторном запуске и вовсе ни чего не показывает, но файлы видит (могу в ноут зайти удаленно через wifi сеть total commander)
Ответ на пост «Обход создания учетной записи Microsoft при установке Windows 10 или 11»2
Есть способ легче, ставьте GNU/Linux / Freebsd / Redox os
Ответ на пост «Обход создания учетной записи Microsoft при установке Windows 10 или 11»2
Как установить Windows 11 без подключения к Интернет
Нажмите Shift + F10 на окне подключения к Интернету при первичной настройке Windows 11. Это откроет Командную строку.
В окне Командной строки введите следующее: OOBE\BYPASSNRO. Подсказка: для смены языка ввода используйте клавиши Alt + Shift.
Дойдя до экрана «Давайте подключим вас к сети» не подключайтесь к Интернету (при кабельном подключении стоит заранее отключить кабель), а нажмите клавиши Shift+F10 (на некоторых ноутбуках — **__Shift+Fn+F10__**), это откроет командную строку. В принципе, Shift+F10 можно использовать и на первом экране настроек, не доходя до этого окна, если вы уверены, что Интернет отключен.