- Почему стоит изучать PowerShell
- Коротко о том, как читать команды
- Работа с процессами и службами
- Get-Process
- Stop-Process
- Get-Service
- Start-Service и Restart-Service
- Сеть и диагностика
- Test-NetConnection
- Resolve-DnsName
- Get-NetIPAddress
- Invoke-RestMethod
- Сбор информации о системе
- Get-ComputerInfo
- Get-CimInstance
- Get-FileHash
- Файлы и реестр
- Get-ChildItem
- Test-Path
- Get-ItemProperty
- Copy-Item
- Удалённое управление и автоматизация
- Invoke-Command
- Enter-PSSession
- Export-Csv
- Where-Object и ForEach-Object
- Get-Command
- Get-History
- Как ускорить повседневную работу
- PowerShell, командная строка или bash
- Частые заблуждения
- PowerShell работает только в Windows
- Команды надо знать наизусть
- Скрипты опасны и могут всё сломать
- Частые вопросы
- Как быстро получить список всех служб с их статусом?
- Как посмотреть, какое приложение занимает больше всего памяти?
- Можно ли выполнить команды на нескольких серверах сразу?
- Чем Get-CimInstance отличается от Get-WmiObject?
- Где взять список всех доступных команд?
- Как видно из примеров
PowerShell для сисадмина: 20 команд, которые экономят целый день
PowerShell давно перестал быть просто оболочкой. Для администратора Windows это главный рабочий инструмент: с его помощью можно собрать информацию о сотнях серверов за минуту, а не за неделю. Но большинство сисадминов использует только десятую часть возможностей.
Эта статья собрана из реальной практики. Здесь 20 команд, которые закрывают повседневные задачи: процессы, службы, сеть, файлы, реестр, удалённое управление и автоматизация. Каждая команда дана с примером, который можно скопировать и сразу применить.
Почему стоит изучать PowerShell
Windows поставляется с консольным интерфейсом, но именно PowerShell даёт возможность управлять всем, что есть в системе, единообразно. Если команда что-то делает локально, она же делает это и на удалённом компьютере. Это значит, что один скрипт способен обойти весь парк серверов.
Коротко о том, как читать команды
PowerShell построен на глаголах и существительных. Глагол описывает действие, существительное — объект, с которым это действие выполняется. Отсюда понятные имена вроде Get-Process, Stop-Service, Set-Service.
Главный приём — конвейер. Вертикальная черта передаёт результат одной команды в другую. Вместо трёх промежуточных переменных одна строка делает всю работу.
Вот как устроены 20 команд из этой статьи, сгруппированных по задачам.
Работа с процессами и службами
Get-Process
Показывает запущенные процессы и их использование памяти. Это первая команда, которую открывают при жалобе пользователя на тормоза.
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10
Она выводит десять процессов, которые потребляют больше всего оперативной памяти. Сразу видно, что именно съело ресурсы.
Stop-Process
Завершает проблемный процесс по имени или идентификатору.
Stop-Process -Name notepad -Force
Ключ -Force убивает процесс даже тогда, когда окно отказывается закрываться. Это аналог завершения из диспетчера задач, но без лишних кликов.
Get-Service
Показывает состояние всех служб Windows: работают они, остановлены или находятся в чём-то ещё.
Get-Service | Where-Object Status -eq 'Stopped' | Select-Object -First 20
Сочетание с Where-Object превращает вывод в отчёт. Здесь мы видим первые двадцать остановленных служб.
Start-Service и Restart-Service
Запускают и перезапускают службу. Перезапуск службы после смены конфигурации — самая частая операция администратора.
Restart-Service -Name spooler
Одной строкой перезапускается служба печати, не нужно лезть в оснастку и ждать загрузки.
Сеть и диагностика
Test-NetConnection
Замена старых проверок связи. Команда показывает не только доступность хоста, но и открытые порты.
Test-NetConnection mail.imaxis.ru -Port 25
Результат покажет, отвечает ли сервер на SMTP-порту. Раньше для этого приходилось ставить дополнительные утилиты, теперь всё встроено.
Resolve-DnsName
Проверяет DNS-записи прямо из PowerShell.
Resolve-DnsName imaxis.ru -Type MX
Удобно, когда нужно быстро убедиться, что MX-запись домена отвечает на нужный сервер.
Get-NetIPAddress
Показывает все IP-адреса, назначенные компьютеру, и их статус.
Get-NetIPAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress
Команда пригодится, когда на сервере несколько сетевых карт и нужно понять, какой адрес к какой карте привязан.
Invoke-RestMethod
Отправляет HTTP-запросы и возвращает ответ в виде готовых объектов. Это шлюз в мир веб-API.
Invoke-RestMethod -Uri 'https://imaxis.ru/sitemap.xml'
Любой сервис, у которого есть REST-интерфейс, становится управляемым прямо из PowerShell.
Сбор информации о системе
Get-ComputerInfo
Собирает всё о компьютере: производителя, модель, серийный номер, версию Windows.
Get-ComputerInfo -Property Manufacturer, Model, WindowsVersion
С этими данными легко заполнять инвентаризацию без пересылки скриншотов.
Get-CimInstance
Команда для работы с инструментарием Windows Management Instrumentation. С её помощью берут данные практически о чём угодно.
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime, TotalVisibleMemorySize
Здесь видно время последней загрузки системы и объём памяти. Полезно искать серверы, которые давно не перезагружались.
Get-FileHash
Считает контрольную сумму файла.
Get-FileHash setup.exe -Algorithm SHA256
Команда проверяет, соответствует ли скачанный файл заявленному хэшу, и помогает отслеживать целостность дистрибутивов.
Файлы и реестр
Get-ChildItem
Список содержимого папки, но с возможностью фильтров, которые у команды dir нет.
Get-ChildItem C:Logs -Filter *.log -Recurse
Команда находит все лог-файлы со всеми вложениями, даже если папка разрослась на несколько уровней.
Test-Path
Проверяет существование файла, папки или ключа реестра и возвращает истину или ложь.
Test-Path HKLM:SOFTWAREMyApp
Такая проверка работает и в реестре, что делает команду незаменимой в скриптах.
Get-ItemProperty
Читает значения из реестра без открытия редактора.
Get-ItemProperty 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersion'
Удобно, когда нужно узнать версию установленного ПО или параметры обновлений по всей сети.
Copy-Item
Копирует файлы и папки с полным контролем.
Copy-Item C:Backup* D:Archive -Recurse -Force
В отличие от стандартного копирования, команда умеет перезаписывать и работать рекурсивно в одной строке.
Удалённое управление и автоматизация
Invoke-Command
Выполняет команды на удалённом компьютере, если настроен WinRM.
Invoke-Command -ComputerName SRV01 -ScriptBlock { Get-Service spooler }
Теперь можно управлять сервером, не открывая RDP-сессию, и одновременно обращаться к десяткам машин в цикле.
Enter-PSSession
Открывает интерактивную сессию с удалённым компьютером.
Enter-PSSession -ComputerName SRV01
После входа все команды выполняются как на удалённой машине, но без окна рабочего стола.
Export-Csv
Сохраняет результат любой команды в CSV-файл.
Get-Service | Export-Csv C:Reportservices.csv -NoTypeInformation
Экспорт удобно открывать в табличном редакторе или отдавать руководству в виде отчёта.
Where-Object и ForEach-Object
Две команды конвейера, вокруг которых строится почти вся автоматизация.
Get-Process | Where-Object CPU -gt 100 | ForEach-Object { $_.ProcessName }
Сначала фильтруем объекты по условию, потом что-то делаем с каждым результатом отдельно.
Get-Command
Показывает, какие команды доступны и как ими пользоваться.
Get-Command -Name *service*
Когда руки не помнят точного имени команды, эта подсказка экономит минуты поисков в документации.
Get-History
Показывает, какие команды вы уже вводили в этой сессии.
Get-History | Select-Object Id, CommandLine
Если решение задачи получилось удачным, его всегда можно повторить и сохранить в скрипт.
Как ускорить повседневную работу
Секрет скорости не в запоминании десятков команд, а в комбинировании. Конвейер решает половину задач. Вторая половина — настройка профиля.
Профиль PowerShell — это файл, который выполняется при каждом запуске. В него можно добавить функции-обёртки для своих частых действий. Достаточно один раз написать короткую функцию открытия нужной папки или подключения к серверу, и каждая следующая сессия начинается уже настроенной.
Полезно также подключить модуль PSReadLine, который включён по умолчанию. Он добавляет подсветку синтаксиса и история поиска по клавише вверх, как в баш-оболочке.
PowerShell, командная строка или bash
| Критерий | Командная строка | Bash на Windows | PowerShell |
|---|---|---|---|
| Объекты вместо текста | Нет | Нет | Да |
| Работа с .NET-объектами | Нет | Ограниченно | Да |
| Управление Windows-службами | Ограниченно | Нет | Да |
| Удалённое выполнение | Нет | Через SSH | WinRM и SSH |
| Скрипты с ветвлениями | Сложно | Да | Да |
PowerShell унаследовал сильные стороны обеих оболочек и добавил главное — работу с объектами. Вместо парсинга строк вы получаете готовые данные с именами свойств.
Частые заблуждения
PowerShell работает только в Windows
Это уже не так. Существует кросс-платформенная версия PowerShell Core, которая работает в Linux и macOS. Синтаксис большинства команд совпадает.
Команды надо знать наизусть
Достаточно знать структуру и уметь пользоваться Get-Command и Get-Help. Имена команд устроены одинаково, поэтому новая команда читается без словаря.
Скрипты опасны и могут всё сломать
Политика выполнения по умолчанию запрещает чужие скрипты. Любой серьёзный скрипт сначала проверяется на тестовом стенде. Осторожность встроена в саму систему.
Частые вопросы
Как быстро получить список всех служб с их статусом?
Используйте комбинацию Get-Service и Export-Csv, чтобы получить файл с отчётом и открыть его в табличном редакторе.
Как посмотреть, какое приложение занимает больше всего памяти?
Выполните Get-Process с сортировкой по WorkingSet64 и выборкой первых десяти процессов.
Можно ли выполнить команды на нескольких серверах сразу?
Да, Invoke-Command принимает список компьютеров и выполняет блок скрипта на всех сразу.
Чем Get-CimInstance отличается от Get-WmiObject?
Get-CimInstance — современная версия. Она работает по протоколу CIM, поддерживает подключаемые транспортные протоколы и быстрее в большинстве сценариев.
Где взять список всех доступных команд?
Get-Command -CommandType Cmdlet покажет сотни встроенных командлетов, а Get-Help даст документацию по любому из них.
Как видно из примеров
Двадцать команд — это фундамент, закрывающий ежедневные задачи. Процессы, службы, сеть, файлы и удалённое управление — всё в одной оболочке. Пока конкурирующие инструменты лишь отвечают на запросы, PowerShell позволяет выстраивать целые сценарии из простых шагов.
Начните с того, что проблемные задачи превращайте в команды. Через неделю таких замен операции, которые раньше занимали час, будут укладываться в одну строку.
Была ли статья полезна?
Спасибо за обратную связь. Если остались вопросы — задайте их в комментариях ниже.