PowerShell — это не просто оболочка командной строки, а мощная платформа автоматизации, построенная на основе.NET Framework. Для системных администраторов и разработчиков знание PowerShell становится критически важным навыком, позволяющим управлять тысячами серверов одновременно. В отличие от старого cmd.exe, эта среда оперирует объектами, а не просто текстом, что кардинально меняет подход к обработке данных.

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

Базовые команды и навигация

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

Первым делом стоит запомнить команду Get-ChildItem (или её алиас ls и dir), которая выводит список файлов и папок в текущем каталоге. Она аналогична привычной команде dir из командной строки, но возвращает полноценные объекты, с которыми можно работать дальше. Для перехода в другой каталог используется команда Set-Location (алиас cd).

Чтобы узнать, где вы находитесь, достаточно ввести Get-Location (алиас pwd). Это кажется элементарным, но в сложных скриптах потеря контекста текущей директории часто приводит к ошибкам. PowerShell также позволяет работать с различными провайдерами, такими как реестр или переменные окружения, используя те же команды навигации.

  • 🚀 Используйте Get-Command для поиска всех доступных утилит и модулей в системе.
  • 📂 Команда Get-Help — ваш лучший друг для быстрого получения справки по любой команде.
  • 🔄 Алиас Clear-Host (или cls) мгновенно очищает экран консоли от предыдущих выводов.
⚠️ Внимание: Не путайте команды навигации файловой системы с командами работы с реестром, так как синтаксис путей может отличаться, хотя логика работы cd и ls остается единой.

Работа с файлами и папками

Манипуляция файлами — одна из самых частых задач в администрировании. В PowerShell для этого предусмотрен богатый набор командлетов, которые позволяют не только копировать файлы, но и проверять их целостность, атрибуты и содержимое.

Для создания новой папки используется команда New-Item с параметром -ItemType Directory. Копирование файлов осуществляется через Copy-Item, а удаление — через Remove-Item.

Чтение содержимого файла происходит через Get-Content (алиас cat). Если вам нужно только первые или последние строки файла, используйте параметры -Head или -Tail. Запись данных в файл возможна через Set-Content, которая перезаписывает файл, или Add-Content, которая добавляет текст в конец.

  • 📄 Команда Move-Item позволяет перемещать файлы и переименовывать их в одном действии.
  • 🔒 Используйте Get-ItemProperty для просмотра скрытых атрибутов и дат изменения файлов.
  • 🔍 Поиск файлов по шаблону имени реализуется через Get-ChildItem -Filter с поддержкой масок *.txt.

☑️ Чек-лист перед массовым удалением

Выполнено: 0 / 4

Одной из самых мощных функций является возможность проверки действий перед их выполнением. Если вы сомневаетесь в команде удаления, добавьте параметр -WhatIf. Система покажет, что произойдет, но не выполнит действие. Это критически важно при работе с производственными серверами.

⚠️ Внимание: Параметр -Force в команде Remove-Item игнорирует атрибуты «Только чтение» и скрытые файлы, что может привести к потере данных без возможности восстановления из корзины.

Управление процессами и службами

Администраторам часто требуется управлять запущенными процессами и службами Windows. PowerShell предоставляет прямой доступ к этим сущностям, позволяя останавливать, запускать и перезагружать их программно.

Для получения списка всех запущенных процессов используйте команду Get-Process. Она выводит детальную информацию об использовании памяти, процессорного времени и имени процесса. Чтобы остановить зависший процесс, примените Stop-Process с указанием имени или ID процесса (-Id).

Работа со службами осуществляется через Get-Service. Вы можете увидеть статус всех служб, их тип запуска и отображаемое имя. Команды Start-Service, Stop-Service и Restart-Service позволяют управлять состоянием службы без использования графического интерфейса «Службы».

  • ⏹️ Команда Suspend-Process позволяет приостановить выполнение процесса, а Resume-Process — возобновить его.
  • 📊 Параметр -ComputerName в Get-Process позволяет управлять процессами на удаленных компьютерах в домене.
  • ⚙️ Для изменения типа запуска службы используйте Set-Service с параметром -StartupType.
📊 Какие задачи автоматизации вы выполняете чаще всего?
  • Управление службами
  • Сбор логов
  • Настройка сети
  • Мониторинг ресурсов

Если процесс не реагирует на обычную команду остановки, можно использовать принудительное завершение с параметром -Force. Однако это может привести к потере несохраненных данных внутри приложения. Всегда проверяйте, является ли процесс критическим для системы перед принудительным завершением.

Как узнать PID процесса?

Используйте команду Get-Process | Select-Object Name, Id, CPU. PID (Process ID) — это уникальный идентификатор, который необходим для точного управления процессом через скрипты или сторонние утилиты.

Сетевые операции и диагностика

Сетевая диагностика — область, где PowerShell раскрывает свой потенциал на полную. Вместо использования набора разрозненных утилит, вы можете собрать всю информацию в одном объекте и сразу отправить её в отчет.

Команда Test-NetConnection (алиас TNC) является современной заменой устаревшего ping и telnet. Она проверяет доступность хоста, открытый порт и показывает трассировку маршрута. Для получения информации о текущей конфигурации IP-адресов используйте Get-NetIPConfiguration.

Просмотр открытых портов и сетевых соединений выполняется через Get-NetTCPConnection. Это позволяет быстро выявить подозрительные подключения или проверить, слушает ли служба нужный порт. Для проверки DNS-записей используйте Resolve-DnsName, которая заменяет старый nslookup.

  • 🌐 Команда Test-Connection — это улучшенный аналог ping с возможностью отправки большого количества эхо-запросов.
  • 🔗 Get-NetAdapter выводит информацию о всех сетевых интерфейсах, включая их скорость и состояние.
  • 📡 Для проверки доступности веб-ресурса используйте Invoke-WebRequest, который также скачивает содержимое страницы.
⚠️ Внимание: Команды сетевого взаимодействия могут требовать прав администратора, особенно если вы пытаетесь изменить настройки интерфейса или проверить порты на удаленном хосте.

Работа с реестром и переменными

Реестр Windows — это база данных конфигурации системы, и PowerShell позволяет взаимодействовать с ней так же просто, как с файловой системой. Вы можете читать, записывать и удалять ключи реестра, управляя настройками системы централизованно.

Провайдер реестра в PowerShell отображается как диск HKEY_LOCAL_MACHINE (HKLM) или HKEY_CURRENT_USER (HKCU). Для просмотра ключей используйте Get-ChildItem с путем, например, HKLM:\SOFTWARE. Создание нового параметра реестра делается через New-ItemProperty.

Переменные окружения также доступны для чтения и записи. Команда Get-ChildItem Env: показывает все переменные. Для изменения переменной используйте $env:ИМЯ_ПЕРЕМЕННОЙ = "Значение". Изменения в переменных пользователя применяются сразу, а для системных переменных может потребоваться перезагрузка или обновление контекста.

  • 🗝️ Команда Remove-ItemProperty удаляет конкретный параметр из ключа реестра.
  • 📝 Используйте Set-ItemProperty для изменения значения существующего параметра без удаления ключа.
  • 🔍 Поиск по всему реестру возможен с использованием Get-ChildItem -Recurse, но это может занять много времени.
💡

Работа с реестром через PowerShell позволяет автоматизировать развертывание групповых политик и настройку тысяч машин без ручного вмешательства в regedit.

Объектная модель и пайплайны

Главное преимущество PowerShell перед другими оболочками — это работа с объектами. Когда вы запускаете команду, она возвращает не просто текст, а объект с методами и свойствами. Это позволяет фильтровать данные и преобразовывать их без сложного парсинга строк.

Пайплайн (конвейер) передает объекты от одной команды к другой, используя символ |. Например, вы можете получить список процессов, отфильтровать их по использованию памяти и отправить результат на удаление. Формат вывода часто меняется на табличный, если вы используете Format-Table, но лучше работать с объектами напрямую.

Для выбора конкретных свойств объекта используйте Select-Object. Это позволяет сократить вывод до только нужных данных. Команда Where-Object (алиас ?) позволяет фильтровать объекты по условиям, например, выбрать только те процессы, у которых потребление CPU выше определенного значения.

  • 🔧 Команда Measure-Object позволяет подсчитать количество объектов или вычислить сумму числовых свойств.
  • 📅 Sort-Object сортирует объекты по любому свойству, поддерживая как восходящий, так и нисходящий порядок.
  • 🔢 Используйте Group-Object для группировки объектов по определенному свойству, например, по имени процесса.

Понимание того, как объекты передаются по конвейеру, является ключом к написанию эффективных скриптов. Вы можете создавать сложные цепочки команд, где каждая последующая операция работает только с результатом предыдущей. Это делает код чище и читаемее.

⚠️ Внимание: Использование Format-Table или Format-List в середине пайплайна превращает объекты в строки, что блокирует возможность дальнейшей обработки данных другими командами.

Отладка и безопасность

При написании скриптов ошибки неизбежны. PowerShell предоставляет инструменты для отладки, которые помогают найти и исправить проблемы. Кроме того, безопасность выполнения скрипсов регулируется политикой выполнения (Execution Policy).

Политика выполнения определяет, какие скрипты могут запускаться на компьютере. Команда Get-ExecutionPolicy показывает текущий статус. По умолчанию она часто установлена в Restricted, что запрещает запуск любых скриптов. Для тестирования часто используют RemoteSigned или Bypass.

Для отладки кода можно использовать параметр -Verbose в командах, который выводит подробную информацию о процессе выполнения. Также существует отладочная оболочка, которая позволяет ставить точки останова и пошагово выполнять код. Это особенно полезно при отладке сложных циклов и условий.

  • 🐞 Команда Set-PSBreakpoint позволяет установить точку останова в скрипте для пошагового выполнения.
  • 🛡️ Используйте Set-ExecutionPolicy -Scope CurrentUser для изменения политики только для текущего пользователя без прав администратора.
  • 📝 Start-Transcript и Stop-Transcript позволяют записать всю сессию в текстовый файл для последующего анализа.
💡

Перед запуском критического скрипта всегда используйте параметр -WhatIf или -Confirm, если команда их поддерживает, чтобы увидеть потенциальные изменения в системе.

Безопасность также включает проверку подписи скриптов. Скрипты, подписанные доверенным издателем, могут запускаться даже при строгих политиках безопасности. Это важно для корпоративных сред, где необходимо гарантировать целостность кода.

💡

Правильная настройка Execution Policy — это баланс между безопасностью системы и удобством администрирования; не отключайте её полностью без веской причины.

FAQ: Частые вопросы

Как узнать версию установленной PowerShell?

Для получения версии используйте команду $PSVersionTable.PSVersion. Это покажет точную версию движка, установленную на вашей системе, что важно для совместимости скриптов.

Можно ли сохранить настройки PowerShell после закрытия консоли?

Да, вы можете создать профиль PowerShell, добавив скрипт в файл, который загружается при запуске. Используйте команду notepad $PROFILE для создания или редактирования этого файла.

Как экспортировать результаты команды в CSV или JSON?

Используйте команды Export-Csv или ConvertTo-Json. Например, Get-Process | Export-Csv -Path processes.csv сохранит список процессов в CSV-файл без лишних заголовков.

Что делать, если команда не найдена?

Проверьте, подключен ли нужный модуль. Используйте Import-Module ИмяМодуля. Если модуль отсутствует, его можно установить через Install-Module из репозитория PowerShell Gallery.

Как быстро найти справку по конкретной команде?

Введите Get-Help ИмяКоманды -Examples, чтобы увидеть примеры использования. Это часто более информативно, чем полное описание, так как показывает реальные сценарии применения.