Системное администрирование
Ребят, имейте совесть, выжайтишники! Ставьте теги "Системное администрирование" и "Волна постов"!
Ребят, имейте совесть, выжайтишники! Ставьте теги "Системное администрирование" и "Волна постов"!
Прочитал тут забавную статью на хабре, как чипсы со вкусом кокоса защищают серверную инфраструктуру на Тайване.
Немедленно вспомнился Нильс Бор со своей ставшей уже бессмертной классикой – объяснением, почему он, Нобелевский лауреат, прибил подкову над дверью своего дома:
разумеется, я не верю, что подкова приносит удачу. Но я слышал, что она помогает независимо от того, верят в неё или нет.
За время своего нахождения в корпоративном ИТ я страдал от:
разрыва кабеля экскаватором (классическая классика);
пожара в ЦОДе;
«просто» развала облака в ЦОДе;
отказа системы кондиционирования;
нарушения регламентов при замене оборудования администраторами, что мне пытались выдать за отказ системы кондиционирования.
Каждый раз было либо больно, либо очень больно. Наверняка были и ещё какие-то аварии, которые я не запомнил – у меня на месте запоминалки всё отгорело и осыпалось, и теперь там просто дзен-мозоль: пережили то, переживём и это.
Но вопрос введения в ИТ-культуру какого-то отечественного продукта в качестве талисмана, гарантирующего увеличение уровня доступности серверной инфраструктуры, давно назрел и перезрел. Надеюсь, в Минцифры осознают проблему и предложат централизованное, импортозамещённое решение.
Давайте попробуем предложить свои варианты? Условий, на мой взгляд, несколько:
зелёное;
запечатанное;
с чёткой датой окончания срока годности, чтобы его можно было менять, как сертификаты;
отвратительное на вкус, чтобы его с гарантией никто из админов не потребил.
С учётом всех ограничений на ум приходит лишь огуречный лосьон. Что думаете, товарищи админы?
👉 Взял тут: Об ИТ и менеджменте. Канал мой, тэг моё.
к сожалению у нас еще не вдупляют, что работа в сети или работа с ПК - это не говнопинание и халявные деньги, а это тоже тяжелый, а главное очень ответственный труд. Не важно админ ты в серьезной организации, мелкий фрилансер, серьезный блогер и т.д. Все это полученный большой обьем знаний, которым не обладают другие и ты эти знания используешь не просто в теории, а на практике и используешь успешно. Другие смотрят, видят, что ты большую половину времени просто сидишь упершись в монитор или прохлаждаешься, но они и не подозревают, что упершись в монитор ты мониторишь например сеть или железо, когда ты просто ходишь у тебя на ПК идет какой нибудь серьезный процесс, который не может запустить обычный пользователь. Да блять просто ходишь и нихуя не делаешь потому что все работает идеально благодаря тебе. А вот когда хер к жопе подбирается или уже в жопе)) начинают искать специалиста, который этот хер вынет из задницы)))
Дисклеймер. В пикабу нет редактора кода - поэтому такое форматирование и картинки. В конце поста я дам ссылку на github. Почитайте, и если вам интересно, смотрите код на гитхабе.
Каждый раз, когда вы делаете фотографию, ваша камера записывает в файл не только само изображение, но и служебную информацию: модель камеры и объектива, дату и время съемки, выдержку, диафрагму, ISO, GPS-координаты. Эти данные называются EXIF (Exchangeable Image File Format).
Хотя PowerShell имеет встроенные средства для чтения некоторых метаданных, они ограничены. Чтобы получить доступ ко всей информации, нужен специализированный инструмент. В этой статье я использую ExifTool.
ExifTool — это бесплатная, кросс-платформенная утилита с открытым исходным кодом, написанная Филом Харви. Она является золотым стандартом для чтения, записи и редактирования метаданных в самых разных форматах файлов (изображения, аудио, видео, PDF и др.). 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 для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ
Чтобы эффективно использовать ExifTool, нужно знать, как PowerShell запускает внешние .exe файлы. Правильный и самый надежный способ запуска внешних программ — это оператор вызова & (амперсанд). PowerShell выдаст ошибку в случае, если путь к программе содержит пробелы. Например, C:\My Tools\exiftool.exe. & (амперсанд)** говорит PowerShell: "Текст, который следует за мной в кавычках, — это путь к исполняемому файлу. Запусти его, а всё, что идет дальше, — это его аргументы".
# Правильный синтаксис
> & "C:\Path With Spaces\program.exe" "аргумент 1" "аргумент 2"
Всегда используйте &, когда работаете с путями к программам в переменных или путями, которые могут содержать пробелы.
Теперь объединим наши знания.
Самый простой способ получить все данные из фото и изучить их — это запросить их в формате 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)"
Этот код откроет интерактивное окно, где вы сможете отсортировать данные по имени параметра или значению, а также отфильтровать их, просто начав вводить текст. Это невероятно удобно для быстрого поиска нужной информации.
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` в любом текстовом редакторе и вставить аккуратно отформатированную таблицу.
Часто вам не нужен весь отчет, а лишь одно или два значения. Поскольку $exifObject — это обычный объект PowerShell, вы можете легко обращаться к его свойствам.
Иногда нужно проанализировать не одно фото, а целую папку с изображениями.
ExifTool умеет сам искать файлы во всех подпапках при использовании ключа -r.
Это один из самых популярных сценариев автоматизации — файлы получают имена по дате/времени съемки.
> $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.
Полезно, если вы хотите построить карту по вашим фото.
# Удалим все GPS-теги из JPG и PNG
> & $exifToolPath -r -overwrite_original -gps:all= "D:\Photos"
💡 Это действие необратимо, поэтому делайте бэкап перед выполнением.
Иногда фото сняты в другом часовом поясе. ExifTool может сместить дату.
# Смещаем время на +3 часа
> & $exifToolPath "-AllDates+=3:0:0" "D:\Photos\IMG_*.JPG"
> $backupPath = "C:\Reports\metadata_backup.json" & $exifToolPath -r -json "D:\Photos" | Out-File -Encoding UTF8 $backupPath
Хотя это можно сделать одной строкой, вывод в 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: конвейер и объект.
Во второй части я рассказал как объекты взаимодействуют через переменные и конвейер.
В третьей части познакомились с файловой системой и провайдерами.
Сегодня рассмотрим интерактивную работу с данными в консоли.
Дисклеймер. На пикабу нет редактора кода, поэтому картинки и кривое форматирование. В конце поста я размещу ссылки на статью и исходники в github. Приятного чтения.
❗ Важно: Все описываемые ниже инструменты требуют 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, чтобы закрыть окно без возврата данных.
Отображать табличные данные прямо в консоли в виде интерактивной таблицы с навигацией по строкам и столбцам.
Сортировать столбцы по нажатию клавиш.
Фильтровать данные с помощью поиска.
Выбирать одну или несколько строк с возвратом результата.
Работать в чистой консоли без GUI-окон.
Поддерживать большое количество строк с прокруткой.
Поддерживать различные типы данных (строки, числа, даты и пр.).
Выводится список процессов в интерактивной консольной таблице. Можно фильтровать по имени, сортировать столбцы и выбирать процессы. Выбранные процессы возвращаются в переменную $selected.
$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
Шаг 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
Полезно? Подпишись.
Понравилось — ставь «+»
Задавайте вопросы в комментариях 👇👇👇
Удачи! 🚀
🎉 Праздник был придуман в 2000 году американским IT‑специалистом Тедом Кекатосом. Он хотел отблагодарить коллег, которые остаются «за кадром», поддерживая работу серверов, сетей и баз данных. Первое празднование прошло в последний пятничный день июля, и с тех пор этот день стал традицией во многих странах.
Интересное:
🔸 Основная цель праздника — напомнить пользователям, что за стабильной работой компьютеров стоят люди, а не магия.
🔸 Сисадминов часто называют «невидимыми героями» — их труд замечают только при сбоях. Или ругают.
🔸 Современный сисадмин совмещает роли инженера, архитектора сетей, специалиста по кибербезопасности и психолога для пользователей.
🔸 Символом праздника считается кружка кофе, ведь именно с ним начинается большинство дежурств.
💜 С праздником СисАдмины!) Пусть в ваших компаниях будет меньше сбоев)
Для ДС сервера проекта, по мобильному сталкеру нужен СА(Серверный Администратор), адекватный, с опытом, знанием лора и свободным временем