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.
☑️ Чек-лист перед массовым удалением
Одной из самых мощных функций является возможность проверки действий перед их выполнением. Если вы сомневаетесь в команде удаления, добавьте параметр -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, чтобы увидеть примеры использования. Это часто более информативно, чем полное описание, так как показывает реальные сценарии применения.