Реклама. АО «ТаймВэб». erid: 2W5zFG3MBNx
Операционная система Windows пользуется популярностью на протяжении многих лет благодаря своему удобству и регулярным обновлениям. Среди ее функций особое место занимает командная строка – мощный инструмент для выполнения различных задач. Опытные пользователи ценят ее за возможности автоматизации и управления системой.
В этой статье мы разберемся, что такое командная строка, как она работает и чем отличаются ее встроенные инструменты – PowerShell и CMD.
Что из себя представляет командная строка Windows?
Командная строка, также известная как CMD (Command Line Interpreter), – это инструмент который позволяет управлять файлами и папками в Windows с помощью ввода текстовых команд. Принцип ее работы напоминает старые операционные системы, где все действия выполнялись вручную через текстовый интерфейс. Теперь командная строка – это просто функция Windows, которая открывается в отдельном окне.
Сегодня CMD остается важным инструментом, который чаще всего используется для двух типов задач:
- устранение неполадок;
- выполнение диагностических операций.
Через командную строку можно получать доступ к параметрам программ и управлять каталогами, которые не видны в привычном графическом интерфейсе, а также выполнять системные операции, требующие точности и контроля.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Как открыть командную строку CMD
В современных версиях Windows есть несколько способов открыть командную строку, что иногда может запутать начинающих пользователей. Они ошибочно полагают, что вызов CMD из разных мест интерфейса создает ее разные версии.
На самом деле, независимо от способа запуска, открывается одна и та же командная строка, которая работает с одними и теми же командами. CMD является обычным исполняемым файлом в корневой системе Windows.
Но для удобства и ускорения работы этот файл можно открыть из разных мест:
- Через строку поиска Windows: введите «cmd» или «командная строка» в поиске на панели задач.
- С помощью комбинации клавиш Win + R: откроется окно «Выполнить», в котором нужно ввести «cmd» и нажать Enter.
- Через проводник Windows: откройте проводник, перейдите по адресу: «C:\Windows\System32\cmd.exe» и запустите файл cmd.exe вручную.
Само управление устройством через командную строку предельно простое и интуитивно понятное, оно состоит из требуемой команды и ее значения (параметра).
Необходимо учитывать, что синтаксис команд в CMD критичен. Каждая черточка, символ или пробел играют важную роль, поэтому вводить команды следует без ошибок. Впрочем, если параметр указан неправильно, система автоматически покажет подсказку с доступными вариантами. Поэтому использование командной строки понятно даже для начинающих пользователей.
Что такое PowerShell Windows
PowerShell – это современная оболочка для Windows, которая представляет собой усовершенствованную альтернативу классической командной строке CMD. Основной особенностью PowerShell является ее расширенный функционал и интуитивно понятный интерфейс для работы с командами.
PowerShell появился в ответ на пожелания пользователей о необходимости более мощного инструмента для администрирования системы.
Удобный синтаксис команд
В PowerShell можно вводить команды в более человекочитаемом формате. Например, для проверки интернет-соединения вместо ping используется команда Test-Connection – она более наглядна и понятна для пользователей без опыта работы с командной строкой.
Расширенный функционал
В PowerShell собраны специализированные инструменты для работы с командами из Windows Management Instrumentation (WMI). Кроме того, оболочка поддерживает функционал языков программирования, таких как .NET, что позволяет автоматизировать задачи и управлять системой на более глубоком уровне.
Гибкость команд и поддержка скриптов
PowerShell позволяет создавать полноценные скрипты из нескольких команд для автоматизации задач. Это значительно упрощает работу системных администраторов и опытных пользователей. Так как команды стало проще вводить, воспринимать и запоминать.
Способы доступа к PowerShell
PowerShell можно открыть несколькими способами:
- Через командную строку CMD: введите «powershell» и нажмите Enter.
- Через сочетание клавиш Win + X: в появившемся меню выберите «Windows PowerShell».
- Правый клик по кнопке Windows: в контекстном меню найдите «Windows PowerShell» или «Terminal» (в зависимости от версии Windows).
Зачем PowerShell обычному пользователю
Если командная строка CMD чаще используется для базового управления компьютером и папками, то PowerShell предоставляет гораздо больше возможностей, включая администрирование системы, автоматизацию задач и диагностику.
Основные преимущества PowerShell:
- Готовые сборки (скрипты). В PowerShell можно использовать готовые скрипты для выполнения целого набора команд одним кликом.
- Создание собственных скриптов. Пользователи могут создавать свои скрипты с расширением .ps1, которые содержат команды для автоматизации действий.
Основные различия: функциональность и возможности сценариев
Несмотря на схожесть назначения, PowerShell и командная строка CMD различаются по функциональности, набору доступных команд, синтаксису и возможностям работы с каталогами.
Поддержка справки и помощи
В PowerShell есть встроенная система справки, которую можно вызвать командой:
Get-Help
В результате появляется подробная информация о командах, способах их ввода и возможностях. Это значительно упрощает изучение PowerShell и делает его более удобным для освоения.
Синтаксис команд
PowerShell и CMD используют разный синтаксис. Некоторые команды, привычные для CMD, могут быть недоступны в PowerShell, и наоборот. В PowerShell эти команды нередко «зашиты» внутри готовых скриптов или являются частью более сложных сценариев.
Объектно-ориентированный подход
Главное отличие PowerShell от CMD заключается в объектно-ориентированном подходе:
- В CMD команды работают на уровне текстового ввода и вывода данных.
- В PowerShell команды обрабатывают объекты, которые открывают доступ к мощным инструментам автоматизации и управления.
PowerShell был разработан значительно позже командной строки CMD, поэтому он вобрал в себя более современные технологии и принципы работы.
Команды PowerShell и CMD
Рассмотрим популярные команды PowerShell и их аналоги из классической командной строки.
Как изменить каталог
Смена активного каталога или переход между папками – это одна из базовых команд, с которой начинают знакомство пользователи.
В CMD для этого используется команда:
cd путь\к\каталогу
В PowerShell аналогичная функция выполняется командой:
Set-Location -Path путь\к\каталогу
Особенности:
- в обоих случаях путь указывается через обратные слэши \;
- переключение диска осуществляется в PowerShell привычной командой d: или расширенной формой:
Set-Location d:
Как перечислить файлы в каталоге
Чтобы вывести список файлов и папок в текущем каталоге, в CMD применяется команда dir. В PowerShell используется ее более мощный аналог – команда Get-ChildItem:
Get-ChildItem C:\Users\Documents
Эта команда позволяет не только перечислить файлы, но также отобразить скрытые папки и расширенную информацию о каждом объекте в каталоге. Она наглядно демонстрирует объектно-ориентированный подход PowerShell, где файлы и папки рассматриваются как объекты с различными свойствами.
Как переименовать файл
Переименование файла в CMD выполняется командой:
ren старое_имя новое_имя
В PowerShell используется более развернутая команда:
Rename-Item старое_имя новое_имя
Особенности:
- указывается два параметра: путь к текущему файлу и его новое имя;
- в отличие от ручного переименования в проводнике, команда позволяет автоматизировать этот процесс для нескольких файлов или папок.
Благодаря объектно-ориентированному подходу и интеграции с языками программирования, PowerShell предоставляет больше возможностей для автоматизации управления системой и каталогами.
Ключевые отличия команд PowerShell от CMD
Ниже приведем примеры наиболее часто используемых команд в CMD и их аналогов в PowerShell, которые называются командлетами.
Проверка интернет-соединения
В CMD для проверки доступности хоста используется команда ping:
В PowerShell для той же задачи используется командлет Test-Connection:
PowerShell предоставляет более детализированный результат выполнения команды с дополнительными полями (Source, Bytes, Time).
Отображение маршрута сетевого соединения
В CMD для просмотра маршрутов используется команда route print, а аналогичная функция в PowerShell выполняется командлетом Get-NetRoute.
При этом PowerShell представляет информацию в более структурированном виде, позволяя применять фильтры и дополнительные параметры для обработки данных.
Перспективы на будущее: наследие CMD и эволюция PowerShell
Классическая командная строка постепенно теряет свою актуальность при работе с папками. Основная причина этого заключается в ее ограниченной функциональности.
PowerShell эволюционировал из простой утилиты для выполнения команд в полноценный инструмент для разработчиков, системных администраторов и опытных пользователей. Сегодня он не только заменяет CMD, но и становится базовым компонентом Windows для ввода сложных задач и автоматизации процессов.
Выбор подходящего инструмента для решения задачи
Выбор между командной строкой CMD и PowerShell зависит от уровня подготовки пользователя и характера задач, которые нужно решить.
CMD
Командная строка остается удобным инструментом для начинающих пользователей, которые только знакомятся с архитектурой Windows. Она имеет минималистичный синтаксис и позволяет выполнять базовые команды.
PowerShell
PowerShell – это мощный инструмент, который решает задачи по настройке и управлению операционной системой:
- автоматизация рутинных действий;
- выполнение сложных операций администрирования;
- обработка данных с использованием расширенных функций и командлетов.
При этом переход из CMD на PowerShell не вызывает трудностей, поскольку многие базовые команды полностью идентичны.
Заключение
PowerShell содержит базовые возможности CMD и дополняет их расширенным набором команд. Он собрал под одной оболочкой лучшие возможности командной строки и автоматизации. С другой стороны, CMD остается минималистичным инструментом, который позволяет взаимодействовать с системой на глубинном уровне. Она полезна для выполнения базовых команд и понимания архитектуры Windows.
Интерпретатор командной строки (Command Line Interpreter, или CMD) и PowerShell — это приложения, используемые для прямого взаимодействия с операционной системой Windows. На первый взгляд у них много общего, но в этом тексте мы сконцентрируемся на ключевых отличиях командной строки CMD и PowerShell.
Что из себя представляет командная строка Windows?
Интерпретатор командной строки (более распространенное название — командная строка Windows) — это командная оболочка, которая появилась впервые в MS-DOS 1980-х годов. Она позволяла пользователю взаимодействовать с операционной системой (ОС) напрямую.
Так, данная командная оболочка предоставляет среду для запуска приложений и различных утилит — выходные данные отображаются в том же окне. Командную строку можно использовать для создания и редактирования сценариев и сохранения их в пакетных файлах, для решения задач автоматизации в рамках одной системы.
Как открыть командную строку CMD
Прежде чем проводить сравнение Windows PowerShell и CMD, хорошо бы понять, где их найти и как с ними взаимодействовать.
Существует несколько способов открыть интерфейс командной строки. Классический метод — через поисковую строку, введя в ней слова cmd или командная строка.
Для большинства этот способ быстрее и удобнее, но существует и другая возможность получить доступ к cmd.exe:
- Комбинацией клавиш win+r открыть меню выполнения.
- Ввести в открывшееся меню команду cmd.
Также можно вручную открыть cmd.exe из его исходного местоположения: C:\Windows\system32\cmd.exe.
Для взаимодействия с ОС в командной строке нужно ввести команду и ее параметр.
Например, чтобы проверить соединение с удаленным хостом вводим:
ping -r google.com
Где ping — команда, -r — параметр команды, google.com — адрес удаленного хоста.
После этого командная строка выполняет введенную команду и реализует задачу или функцию, для которой она предназначена в Windows.
Команды должны быть введены в Command Prompt без ошибок. Неправильный синтаксис или написание могут привести к сбою команды или, что еще хуже, к выполнению неправильной команды или правильной команды неправильным способом. Если ввести команду без параметров, вы увидите подсказку с возможными параметрами:
Теперь мы можем перейти к PowerShell.
Что такое PowerShell Windows
PowerShell — это более продвинутая версия CMD. Кросс-платформенное решение для автоматизации задач, состоящее из оболочки командной строки, языка сценариев и структуры управления конфигурацией.
Подробнее о PowerShell читайте здесь →
Ключевым отличием от CMD, заметным на старте работы, являются командлеты — упрощенные команды, используемые в среде PowerShell. Назначение команды PowerShell довольно легко интерпретировать по названию: они следуют простой закономерности — за глаголом идет существительное.
Сравним:
- Команда CMD: ping
- Командлет PowerShell: Test-Connection
Командлеты помогают управлять инфраструктурой Windows. Кроме того, они позволяют обычному пользователю получить удаленный доступ к реестру, файловой системе и пространству Windows Management Instrumentation (WMI) на системах.
Как современная командная оболочка PowerShell включает в себя лучшие функции других популярных оболочек. В отличие от большинства оболочек, которые принимают и возвращают только текст, PowerShell принимает и возвращает объекты .NET. Это программная платформа, в которой исполняются программы. Таким образом, нет необходимости разбирать текст для извлечения информации из выходных данных.
Как язык сценариев PowerShell обычно используется для автоматизации управления системами, позволяет создавать сложные сценарии с множеством условий. Он также используется для сборки, тестирования и развертывания решений, часто в средах CI/CD.
Открыть shell, как и командную строку, можно через поисковую строку и через меню выполнения, вписав в обоих случаях PowerShell. Также, в зависимости от версии операционной системы его можно найти в Power User Menu. Открывается оно комбинацией клавиш win+x или нажатием правой кнопки мыши на значок Windows.
Зачем PowerShell обычному пользователю
Разница PowerShell и CMD заключается в их использовании. Последний используется в основном для выполнения пакетных команд, устранения некоторых первичных неполадок. PowerShell, в свою очередь, может использоваться как для выполнения пакетных команд, так и для административных целей.
Важной является возможность создания сценариев (скриптов) — текстовых файлов, содержащих всего одну или целый набор команд PowerShell.
В качестве примера создадим простой выводящий текст сценарий, который состоит из одной команды:
- Создаем файл сценария (с расширением ps1), в котором будут прописаны команды:
2. В окне PowerShell вводим & и путь к необходимому файлу:
Теперь давайте разберем, как выполнять простое взаимодействие с системой при помощи CMD и PowerShell.
Как получить помощь?
Первым делом необходимо узнать, какие команды вообще существуют. Это можно узнать, запросив помощь у самого приложения.
В командной строке Windows используется команда help, чтобы отобразить список доступных команд.
В PowerShell, чтобы выполнить такое же действие используется команда Get-help.
Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.
Как изменить каталог?
Для изменения каталога (папки) в командной строке применяется команда Change Directory (cd). Эта команда позволяет перейти в другую папку с компьютера (изменить текущий каталог).
В PowerShell команда cd является псевдонимом для командлета Set-Location-Path <название каталога>, выполняющего идентичную функцию.
Первая итерация команды CD, которую полезно знать, это CD\. Она переводит вас на вершину файловой иерархической структуры (дерева каталогов).
Для перехода в нужную папку с диска, выполните команду CD «название папки». Вложенные папки должны быть разделены символом бэкслэша: \. Например, если необходимо перейти в папку user, находящуюся в C:\users нужно ввести команду cd users\user. Используя команду cd .., можно вернуться на один каталог вверх.
Чтобы изменить диск, нужно ввести его название с двоеточием. Например, d:, чтобы переключиться на диск D. В PowerShell используется командлет set-location d:.
От каталогов перейдем к хранящимся в них файлам.
Как перечислить файлы в каталоге?
Команда dir (Directory) используется, чтобы перечислить файлы в каталоге через командную строку.
Отличие PowerShell – в используемой для перечисления файлов команде. Чтобы перечислить файлы в каталоге, используется команда Get-ChildItem.
Как переименовать файл?
Чтобы переименовать файл в каталоге, в cmd используется команда ren (rename). После нее сначала вводится имя файла, которое вы хотите заменить, затем вводится желаемое имя. Например, ren dir1 dir2.
В Windows PowerShell используется команда Rename-Item для переименования папки путем передачи пути к переименовываемой папке и целевого имени. Например, C:\Windows\dir1 dir2.
Далее разберем важные утилиты, которые могут пригодиться при взаимодействии с системой, а также их отличия в CMD и PowerShell.
Ключевые отличия команд PowerShell от CMD
Завершим знакомство обычного пользователя с PowerShell и CMD сравнением команд и командлетов. Остановимся на нескольких примерах.
- Ping: как мы писали ранее, аналогом cmd-команды ping является командлет Test-Connection в PowerShell.
- Tracert: в PowerShell для определения маршрута следования данных в сети используется Test-NetConnection -TraceRoute.
- IPConfig: Get-NetIPConfiguration в PowerShell – эквивалент IPConfig.
- Nslookup: Команда Resolve-DnsName выполняет DNS-запрос для указанного имени. Эта команда функционально аналогична инструменту nslookup, который позволяет пользователям запрашивать имена.
- Netstat: Get-NetRoute в PowerShell получает текущие TCP-соединения.
- Route: Команда Get-NetRoute является аналогом route и получает информацию о маршруте IP из таблицы маршрутизации IP.
- Netsh: Netsh – служебная программа на базе командной строки, позволяющая показывать или изменять конфигурацию сети активного компьютера. Чтобы запустить ее, и в Windows Powershell, и в CMD используется одна и та же команда — netsh.
- Gpupdate: ее аналогом является команда Invoke-GPUpdate. Она обновляет параметры групповой политики, включая параметры безопасности, установленные на удаленных компьютерах.
- Gpresult: Команда Get-GPResultantSetOfPolicy получает и записывает в файл информацию о результирующих политиках (RSoP) для пользователя.
Разница между командной строкой CMD и Windows PowerShell: что выбрать
Мы завершили обзор, которые условно можно назвать «PowerShell против CMD». Очевидно, есть много причин, по которым Windows PowerShell заменила командную строку Windows по умолчанию в ОС Windows 10. Но, если вы привыкли к CMD, вам не обязательно переходить на PowerShell.
Хотя переход не будет болезненным: в среде PowerShell большинство команд из CMD работают. Все потому, что были созданы псевдонимы командной строки в PowerShell, которые позволяют интерпретировать старые команды cmd как новые команды PowerShell.
Какой инструмент выбрать — ваш выбор. Но PowerShell – более современен. В две основные функции PowerShell встроены дополнительные возможности. И эти возможности, или сценарии использования, являются причиной растущей популярности PowerShell.
Чтобы узнать, как старые команды CMD соотносятся с новыми командами PowerShell, используйте команду Get-Alias.
Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров16K
Краткая предыстория
Когда компьютеры только появились, пользователи общались с ними с помощью текстовых команд. Это так называемый CLI (Command Line Interface) — интерфейс командной строки. Всё, что вы могли сделать — это вводить команды вручную и смотреть результаты их отработки, которые выводились также в виде текста или символов. Например, в 1980-х годах MS-DOS была популярной операционкой, и пользователи должны были знать многие команды наизусть, вроде dir (показать файлы) или copy (скопировать файл), чтобы полноценно работать в ней.
С появлением GUI (Graphical User Interface) всё изменилось. Windows, macOS и другие операционные системы представили графический интерфейс с окнами, кнопками и мышью. Это сделало компьютеры доступными для миллионов людей, которые не хотели запоминать команды. Казалось бы, что «неудобный» CLI должен уйти в прошлое, но этого не произошло до сих пор. Более того, CLI продолжил активное развитие!
GUI + CLI
Сейчас CLI встроен в любую операционную систему, но видеть его использование чаще всего можно в фильмах про хакеров. Для большинства людей работа в интерфейсе командной строки считается «магией», которой владеют лишь «избранные». Вопрос: «В каком интерфейсе проще, лучше и удобнее работать – графическом или интерфейсе командной строки?» — изначально некорректен. А что, если не выбирать между ними, а научиться пользоваться эффективно обоими?
Командная строка — это как суперспособность для тех, кто знает, как её использовать и дальше я попытаюсь вам это доказать на примерах.
CLI в Windows: CMD и PowerShell
Давайте рассмотрим Windows, как самую массовую ось. Для Windows есть два основных инструмента для работы с командной строкой: CMD и PowerShell.
PowerShell — это эволюция CMD. Инструмент сочетает в себе мощь CLI с гибкостью современного языка программирования. Его и будем использовать.
Скачать PowerShell
Хватит лирики, давайте уже рассмотрим примеры. Рассматривая примеры, задумайтесь, сколько бы времени у вас заняло делать эту операцию через графический интерфейс?
Лайфхак!
Если примеры ниже покажутся вам сложными, то это только кажется. Для написания скриптов для PowerShell больше не нужно знать язык программирования. Используйте ChatGPT, GigaChat, любой чат-бот, которым вы уже наверняка пользуетесь: «Напиши мне однострочный скрипт PowerShell, который…» и чат-бот вам быстро выдаст результат.
5 примеров того, как PowerShell может сэкономить вам часы
Пример 1 — Массовое переименование файлов
В графическом интерфейсе каждый файл надо переименовывать отдельно, что долго и муторно. Но есть выход:
Get-ChildItem -Path "C:\Photos" | ForEach-Object { Rename-Item -Path $_.FullName -NewName ("Otpusk_" + $_.Name) }
Скрипт переименует все файлы в папке C:\Photos, добавив к ним префикс «Otpusk_» и это займёт менее 1 сек.
Пример 2 — Поиск и удаление пустых папок
Как это вообще сделать в графическом интерфейсе? В CLI — легко:
Get-ChildItem -Path "C:\Data" -Directory -Recurse | Where-Object { (Get-ChildItem -Path $_.FullName).Count -eq 0 } | Remove-Item -Force
Скрипт найдёт и удалит все пустые папки в C:\Data.
Пример 3 — Поиск файлов по определённым условиям
Поиск в GUI Windows конечно же есть, но мне не нравится скорость его работы и удобство задания условий поиска. Поэтому иногда файлы гораздо быстрее найти с помощью PowerShell:
$yesterday = (Get-Date).AddDays(-1).Date; Get-ChildItem -Path C:\ -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.Extension -eq ".docx" -and $_.CreationTime.Date -eq $yesterday } | ForEach-Object { Write-Host "Файл: $($_.FullName), Дата создания: $($_.CreationTime)" }
С этим скриптом вы можете легко и быстро найти все .docx файлы, созданные вчера на диске C. Подобные сценарии актуальны, когда сохранил куда-то файл, а куда — не посмотрел.
Пример 4 — автоматизация каких-то действий
Например, вам нужно в определённой папке найти все jpg размером от 2 Мб до 5 Мб и получить архив с ними в целевой папке. Это можно сделать в GUI, но потребуется сделать несколько действий и при этом есть риск совершить ошибку, отбирая картинки по критериям. Скрипт не ошибётся:
$sourceFolder = "C:\Photos"; $destinationFolder = "C:\FilteredPhotos"; $archivePath = "$destinationFolder\PhotosArchive.zip"; Get-ChildItem -Path $sourceFolder -Recurse -File -Include *.jpg | Where-Object { $_.Length -gt 2MB -and $_.Length -lt 5MB } | Copy-Item -Destination $destinationFolder -Force; Compress-Archive -Path "$destinationFolder\*" -DestinationPath $archivePath -Force; Remove-Item -Path "$destinationFolder\*" -Exclude PhotosArchive.zip -Force
Скрипт в целевой папке (включая подпапки, если они есть) находит jpg по критериям размера (от 2 до 5 МБ), копирует их во временную папку, затем архивирует и удаляет фотки, оставляя только архив.
Пример 5 — управление процессами
Немного специфичный пример, но иногда полезная функция, когда какой-то процесс или процессы забили процессор, от чего компьютер стал тормозить:
Get-Process | Where-Object { $_.CPU -gt 30 } | Stop-Process -Force
Скрипт завершит все процессы, которые используют больше 30% CPU.
Итого
CLI — это не пережиток прошлого, а мощный инструмент, который помогает решать некоторые задачи существенно быстрее и эффективнее, чем если их решать через графический интерфейс. PowerShell позволяет автоматизировать рутину, управлять системой и работать с данными на новом уровне.
Если вы ещё не пробовали PowerShell, самое время начать. Это как получить суперспособность для работы с компьютером.
Это моя первая статья на Хабре. Поддержите меня вашими реакциями и комментариям. Обязательно напишите мне, если данная статья действительно помогла вам сэкономить своё время. У этой статьи будет продолжение о том, как скрипты PowerShell можно сохранять и запускать по расписанию.
Подписывайтесь на мой канал в Телеграм, куда я также буду постить полезный контент!
#Руководства
-
0
Рассказываем о языке программирования, с помощью которого можно творить чудеса в Windows (и не только).
Иллюстрация: Francesca Tosolini / Unsplash / Annie для Skillbox Media
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
Рядовые пользователи общаются со своими ПК через графический интерфейс: нажимают иконки и кнопки, переключаются между окнами и вкладками.
А системные администраторы используют для этого командную строку. Чтобы компьютер понимал их указания, интерпретатор, он же командная оболочка, переводит всё на машинный язык.
Есть десятки оболочек под разные нужды, предпочтения и операционные системы. В Linux обычно используют Bash, в macOS по умолчанию установлен Zsh, а для Windows (но не только) есть PowerShell.
Из статьи вы узнаете:
- Что такое Windows PowerShell
- Как открыть PowerShell в Windows
- Какие у неё есть команды (они же командлеты)
- Что такое объекты и конвейеры (пайплайны)
- Как запустить выполнение задач в фоновом режиме
- Как работать в PowerShell ISE
- О переменных
- О логических операторах
- Об условиях в Power Shell
- Как работать с циклами
- О массивах, хеш-таблицах, функциях и классах
Windows PowerShell — это одновременно командная оболочка и язык сценариев, основанный на .NET. PowerShell используют для управления компьютером и автоматизации задач. Это полноценный объектно-ориентированный язык, в котором есть переменные, функции, классы и объекты.
В отличие от других командных оболочек, PowerShell работает не со строками, а с объектами. Благодаря этому можно создавать сложную логику. При этом интерпретатор полностью совместим со стандартными командами cmd.exe и может выполнять их.
Команды пишут в интерактивном режиме внутри терминала. Но если вы хотите сохранить какой-то часто используемый скрипт, удобнее использовать ISE.
Windows PowerShell ISE — это интегрированная среда сценариев для PowerShell. В ней можно писать, сохранять и запускать скрипты, есть подсветка синтаксиса, автодополнение, справочник команд и инструменты отладки. PowerShell ISE — легаси-инструмент, он работает для версии языка 5.1 и ниже. Для более поздних обновлений используют IDE общего назначения с плагинами.
С 2016 года язык стал кросс-платформенным. Его можно использовать не только в Windows, но и в macOS (начиная с версии 10.13) и популярных дистрибутивах Linux (каких именно, можно узнать в документации).
Обычно PowerShell предустановлен по умолчанию. Но если у вас его нет, можете воспользоваться инструкцией от Microsoft. Также в документации есть руководства по установке для macOS и Linux.
PowerShell не зависит от версии операционной системы и одинаково работает как на Windows 10, так и на Windows Server.
Есть два основных способа открыть PowerShell или PowerShell ISE в Windows: меню «Пуск» и приложение «Выполнить».
В меню «Пуск» долистайте до папки Windows PowerShell, откройте её и выберите нужное приложение. Здесь есть 32-разрядные (у них х86 в скобках) и 64-разрядные версии терминала и ISE.
Скриншот: Skillbox Media
Приложение «Выполнить» открывается сочетанием клавиш Win + R. В появившемся окне введите powershell или powershell ise (в зависимости от того, что вам нужно) и нажмите ОК.
Скриншот: Skillbox Media
Команды в PowerShell называются командлетами (от английского cmdlet). Все они состоят из связки «Глагол-Существительное», или по-другому «Действие-Объект». Например, Get-Services и Start-Process. Благодаря такой структуре можно понять назначение команды, даже если вы с ней ещё не сталкивались.
После самого командлета ему передаются параметры и их значения. Между всеми словами в команде ставится пробел. Вот пример синтаксиса команды, чтобы перейти в каталог C:\:
Set-Location -LiteralPath C:\ -PassThru
Препарируем её:
- Set-Location — буквально «установить местоположение». Переходит в нужный каталог.
- -LiteralPath C:\ — в этом параметре мы прописываем путь до каталога, в который хотим перейти. У командлета Set-Location это аргумент по умолчанию, поэтому -LiteralPath можно не прописывать отдельно: Set-Location C:\ -Passthru сработает точно так же.
- -PassThru — обычно командлет Set-Location просто меняет местоположение и ничего не возвращает. Этот параметр говорит, что нужно вывести на экран расположение каталога, в который мы перешли.
При этом в PowerShell не важен регистр. Эту же команду можно записать только заглавными буквами, только строчными и даже «лесенкой» — она всё равно сработает.
sEt-loCATion -PATH c:\ -passthru
Если в одной строке написаны сразу несколько команд, они разделяются точкой с запятой ;.
Иногда команда может получиться слишком длинной. Чтобы разбить её на несколько строк, в месте переноса ставится гравис `. Создать новую строку можно сочетанием клавиш Shift + Enter (появится ниже текущей) или Ctrl + Enter (появится выше текущей).
Разделим предыдущую команду:
Set-Location `
-LiteralPath C:\ `
-PassThru
Совет
Стрелки вверх и вниз позволяют прокручивать историю команд, которые вы вводили. Это удобно, если нужно выполнить одну из предыдущих команд ещё раз или внести в неё небольшие изменения.
При работе с терминалом в интерактивном режиме бывает неудобно каждый раз вводить полные названия командлетов. Поэтому у самых распространённых есть псевдонимы, или алиасы, — их сокращённые версии.
Получить список доступных алиасов можно командой Get-Alias (у неё тоже есть свой псевдоним — gal).
Чтобы узнать список алиасов для отдельного командлета, воспользуйтесь параметром -Definition. Например:
Get-Alias -Definition Get-ChildItem
Если вы по алиасу хотите узнать полное название командлета, примените параметр -Name. Это аргумент по умолчанию, поэтому писать его необязательно.
# Оба варианта равноправны Get-Alias -Name clear Get-Alias clear
Многим командлетам для работы нужно передать путь до файла или каталога. Делается это в виде строки, например: C:\Windows\System32.
Но если в этом адресе встретится пробел или другой спецсимвол, PowerShell воспримет его как разделитель. Например:
# Эта команда не будет работать Set-Location C:\Program Files
PowerShell «видит» пробел и думает, что путь до папки закончился на слове Program, а files — это уже значение какого-то другого параметра.
Есть два способа избежать таких ситуаций:
- Экранировать проблемные символы обратным грависом `: C:\Program` Files. Если путь длинный, то это может быть неудобно.
- Поместить весь путь в одинарные или двойные кавычки: ‘C:\Program Files’ или «C:\Program Files» (лучше одинарные).
Также в PowerShell есть сокращения для быстрого доступа к ближайшим директориям:
- Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет посмотреть все папки и файлы в нынешнем местоположении.
- Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет быстро к нему перейти. Это может быть полезно, если вы находитесь где-то в глубоко вложенной директории.
У многих командлетов есть сразу два параметра, в которых можно указать путь до папки или файла: -Path и -LiteralPath. Разница между ними в том, что в -Path можно подставлять переменные, а -LiteralPath воспринимает символы буквально, даже если в них указано имя переменной. О переменных в PowerShell мы рассказываем ниже.
Чтобы узнать подробную информацию о командлете, используйте Get-Help Название-Командлета. Например:
Get-Help Get-Childitem
У Get-Help есть несколько полезных параметров:
- -Detailed даёт более детальную справку.
- -Full даёт полную справку.
- -Examples приводит примеры использования командлета.
- -Online перенаправляет на веб-страницу с документацией.
Командлеты PowerShell возвращают в терминал не строки, а объекты — структуру данных с набором свойств и методов. Подробно об объектах можно прочитать в нашей статье.
Строка, которую вы видите в терминале после выполнения команды — только визуальное представление объекта. PowerShell в виде таблицы показывает некоторые свойства, но не все.
Так же, как командлеты возвращают объекты, они могут принимать и обрабатывать их. Можно написать команду, на выходе получить объект, передать его другому командлету, получить объект уже от него, передать — и так до бесконечности. Это и есть конвейеры, или пайплайны.
Чтобы передать результат командлета другому командлету, между ними ставят вертикальную черту |.
Get-Process возвращает список процессов, запущенных на компьютере. Если передать ему название процесса (или шаблон, написанный с помощью регулярных выражений), командлет выведет только нужные элементы списка.
Вызовем запущенный процесс powershell.
Get-Process powershell
Мы получили объект и таблицу с некоторыми его свойствами. Чтобы узнать все свойства и методы, передадим объект командлету Get-Member. Для этого нам и понадобится конвейер.
Get-Process powershell | Get-Member
Get-Member получил объект от Get-Process и вывел таблицу со всем его содержимым. Результат работы Get-Member — тоже объект (вернее, список объектов), который можно передать по конвейеру дальше.
Например, мы хотим отобразить только те строки, в которых MemberType — это Property. Для этого используем командлет Where-Object.
Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}
Where-Object по очереди перебирает каждый объект, полученный от Get-Member. Выражение в фигурных скобках — логическое:
- $_ ссылается на текущий объект (то есть на отдельную строку в таблице);
- .MemberType обращается к значению свойства MemberType в этом объекте;
- -eq сравнивает, равно ли выражение слева от него выражению справа от него;
- ‘Property’ — это значение, которое мы ожидаем увидеть у свойства MemberType.
О логических выражениях мы рассказываем ниже.
Командлет Format-Table позволяет настроить отображение таблицы, которую PowerShell выводит в терминале: выбрать свойства и методы, которые в ней будут, установить ширину столбцов, сгруппировать данные по нескольким таблицам и так далее.
Отформатируем таблицу, которую получили от командлета Get-Member.
Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition
Расшифруем параметры Format-Table:
- -AutoSize выравнивает ширину столбцов по размеру их содержимого;
- -Wrap переносит содержимое ячейки на следующую строку, если она не помещается в размеры экрана (по умолчанию текст обрезается);
- -GroupBy разделяет одну таблицу на несколько, сгруппированных по значению какого-либо свойства (в нашем случае для каждого MemberType создана отдельная таблица);
- -Property указывает, какие свойства объекта будут отображаться в таблице в качестве столбцов (в нашем случае Name и Definition).
Командлет Sort-Object позволяет отсортировать список объектов (то есть таблицу) по значениям её свойств (то есть столбцов). Отсортируем результат работы GetMember по столбцу Name в алфавитном порядке. Для этого используем параметр -Property (работает как у Format-Table).
Get-Process powershell | Get-Member | Sort-Object -Property Name
У Sort-Object есть и другие полезные параметры:
- -Descending сортирует объекты в порядке убывания.
- -Unique удаляет дубликаты и возвращает только уникальные объекты.
- -Top получает число N и отображает первые N объектов в таблице.
- -Bottom получает число N и отображает последние N объектов в таблице.
Некоторые задачи могут занимать много времени. Это, например, установка и обновление ПО, поиск файла в большой директории. Пока PowerShell выполняет одну команду, писать другие нельзя.
К примеру, попытаемся найти на всём диске C файл powershell.exe. Используем для этого командлет Get-ChildItem с параметром -Recurse. Так он будет искать не только в текущем каталоге, но и во всех подкаталогах.
PowerShell может попытаться зайти в папки, к которым у него нет доступа, поэтому добавим -ErrorAction SilentlyContinue. Если случится ошибка, команда не станет сообщать об этом и просто продолжит выполняться.
Получается так:
Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue
Как видим, пока задача не завершена, командная строка недоступна. Чтобы принудительно прервать её выполнение, нажмите сочетание клавиш Ctrl + C (при этом ничего не должно быть выделено, иначе компьютер воспримет это как команду «Копировать»).
Чтобы не ждать выполнения долгих задач и сразу приступать к следующим, их можно запускать в фоновом режиме. Делается это командлетом Start-Job, а сама команда помещается в фигурные скобки.
Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}
Одновременно можно выполнять любое количество фоновых задач. Помимо Start-Job для работы с фоновыми задачами есть другие командлеты:
- Get-Job выдаёт отчёт со статусом фоновых задач.
- Wait-Job делает консоль недоступной, пока выполняется фоновая задача.
- Stop-Job прерывает выполнение фоновой задачи.
- Receive-Job выводит результат фоновой задачи и удаляет его из памяти. Чтобы сохранить результат в памяти, используйте параметр -Keep.
Wait-Job, Stop-Job и Receive-Job ожидают, что вы примените их к конкретной задаче (или нескольким). Для этого укажите название Name или идентификатор Id. Делать это можно и в связке с Get-Job.
Get-Job Job1
Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.
Важно!
PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.
PowerShell ISE состоит из трёх основных окон:
- область сценариев в верхней части экрана — в ней пишут скрипты;
- область консоли в нижней части экрана — работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;
- панель команд в правой части экрана — полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.
PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами <# и #>.
Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили стайлгайд. Вот несколько правил оттуда.
Используйте нотацию PascalCase в названиях командлетов, функций, параметров, свойств, методов, переменных и классов. Неправильно писать: get-service, Get-service, GET-SERVICE. Правильно: Get-Service.
Пишите полные названия командлетов. Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд. Неправильно: dir, gci, ls. Правильно: Get-ChildItem.
One True Brace Style при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:
if ($var1 -eq $var2) { # Код внутри условия } else { # Код внутри условия # Ещё код внутри условия }
Исключение из прошлого правила — когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:
Get-ChildItem | Where-Object { $_.Length -gt 10mb }
Комментируйте код. Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.
В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится — нужно нажать правую кнопку мыши и в появившемся окне выбрать Выполнить с помощью PowerShell.
Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:
- командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;
- командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.
По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:
- Restricted (установлена по умолчанию) — запрещено запускать любые скрипты.
- AllSigned — разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.
- RemoteSigned — разрешено запускать подписанные доверенным разработчиком и собственные скрипты.
- Unrestricted — разрешено запускать любые скрипты.
Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:
Set-ExecutionPolicy RemoteSigned
Чтобы подтвердить действие, введите y.
Чтобы сохранять данные и обращаться к ним в будущем, в PowerShell есть переменные. Перед их названием ставится знак доллара $, а сами они могут содержать латинские буквы (заглавные и строчные), цифры и нижние подчёркивания.
Переменная может хранить данные любого типа, и их можно перезаписывать.
Переменную можно привести к определённому типу данных. Создадим переменную со строкой 2023 и преобразуем её в число. Чтобы узнать тип данных, воспользуемся методом .GetType().
Чтобы удалить переменную, используется метод .Clear().
Переменные можно подставлять в строки, если они оформлены двойными кавычками. Если же кавычки одинарные, то PowerShell воспринимает символы в строке буквально. Сравните:
Помимо пользовательских также есть системные переменные. Например, $PSVersionTable хранит информацию о версии PowerShell.
PowerShell позволяет проводить с объектами арифметические операции и сравнивать их друг с другом. Для этого он использует логические операторы.
Арифметические операторы:
- + — сложение;
- — — вычитание;
- * — умножение;
- / — деление;
- % — деление по модулю;
- ( и ) — скобки для группировки операций.
Операторы сравнения оформляются так же, как параметры командлетов. Их названия произошли от английских выражений, указанных в скобках.
- -eq — равно (от equal);
- -ne — не равно (от not equal);
- -gt — больше (от greater than);
- -ge — больше либо равно (от greater than or equal);
- -lt — меньше (от less than);
- -le — меньше либо равно (от less than or equal).
Условия в PowerShell создаются с помощью ключевых слов if, elseif и else. В обычных скобках указывается само условие, в фигурных — код, который запускается при его выполнении. Например:
$Number = 123 if ($Number -gt 0) { Write-Host 'Число больше нуля' } elseif ($Number -lt 0) { Write-Host 'Число меньше нуля' } else { Write-Host 'Число равно нулю' } >>> Число больше нуля
Также условия можно задавать с помощью ключевого слова switch. Например:
$Day = 2 switch ($Day) { 1 {Write-Host 'Понедельник'} 2 {Write-Host 'Вторник'} 3 {Write-Host 'Среда'} 4 {Write-Host 'Четверг'} 5 {Write-Host 'Пятница'} 6 {Write-Host 'Суббота'} 7 {Write-Host 'Воскресенье'} } >>> Вторник
Windows PowerShell — язык программирования, на котором администрируют операционные системы и автоматизируют процессы. Он поддерживает объектно-ориентированное программирование и позволяет работать в интерактивном режиме, а также писать, сохранять и выполнять полноценные скрипты.
- PowerShell предустановлен в Windows, но его можно скачать на macOS и Linux.
- У языка есть собственная интегрированная среда сценариев PowerShell ISE, предназначенная для старых версий языка (5.1 и ниже).
- PowerShell работает не со строками, а с объектами. Он обрабатывает их с помощью командлетов, построенных по принципу «Глагол-Существительное».
- Результат выполнения одного командлета можно передавать другому в конвейере.
- Задачи можно выполнять в фоновом режиме.
- PowerShell — высокоуровневый язык, на котором можно работать с переменными, логическими операторами, условиями, циклами, массивами, хеш-таблицами, функциями и классами.
С чего начать путь в IT?
Получите подробный гайд в нашем телеграм-канале бесплатно! Кликайте по баннеру и заходите в канал — вы найдёте путеводитель в закрепе.
Забрать гайд>
Первые версии Linux- и Unix-дистрибутивов традиционно управлялись при помощи командной строки. Несмотря на то, что со временем были выпущены различные графические оболочки, такие как GNOME, KDE, Cinnamon, XFCE, Linux стал прочно ассоциироваться с управлением через терминал. В то же время операционные системы семейства Windows ассоциируются именно с использованием графического интерфейса. Однако, существует способ, при котором можно управлять ОС Windows из командной оболочки, — с помощью инструмента PowerShell. Сегодня мы рассмотрим синтаксис и основы работы с PowerShell.
PowerShell — это мощная кросс-платформенная среда автоматизации и управления конфигурациями, разработанная корпорацией Microsoft. PowerShell объединяет в себе командную оболочку и язык сценариев, что позволяет выполнять административные задачи, автоматизировать процессы и управлять системой Windows.
История развития PowerShell: от Monad до современной версии
История PowerShell берет свои корни в начале 2000-х годов, когда Microsoft решила создать более мощную и продвинутую командную оболочку для Windows, взамен устаревшей cmd
.
В 2002 году Microsoft предложила концепцию объектно-ориентированной оболочки, которая должна была заменить командный процессор Windows. Так родился проект Monad. Среди ключевых особенностей Monad можно выделить следующие:
- Использование объектов вместо простого текстового ввода/вывода, в отличие от Unix-оболочек.
- Единый подход к управлению локальными и удаленными системами.
- Глубокая интеграция с .NET Framework.
- Конвейерная (pipeline) обработка данных с передачей объектов, а не строк.
Впервые широкой публике Monad был представлен в 2003 году, а в 2005 году вышла первая публичная бета-версия. Однако после выхода операционной системы Windows Vista Microsoft решила сменить название c Monad на привычное нам сегодня PowerShell.
В ноябре 2006 года Microsoft выпустила Windows PowerShell под версией 1.0, которая включала в себя полную интеграцию с .NET Framework, поддержку Cmdlets (небольшие команды, работающие с объектами) и интеграцию с WMI (Windows Management Instrumentation). Однако PowerShell версии 1.0 еще не был предустановлен в Windows и поставлялся как отдельный компонент.
В 2009 году была выпущена версия 2.0, в которую были интегрированы такие функции, как удаленное выполнение команд и фоновое выполнение задач, добавлена поддержка модулей для расширения функционала и улучшен обработчик ошибок. Именно с версией 2.0 PowerShell был интегрирован в дистрибутивы Windows, начиная с Windows 7 и Windows Server 2008 R2.
С тех пор было выпущено еще 6 основных релизов:
- PowerShell 2.0 (2009)
- PowerShell 3.0 (2012)
- PowerShell 4.0 (2013)
- PowerShell 5.0 (2016)
- PowerShell Core 6.0 (2016–2020)
- PowerShell 7 (2020)
На момент написания статьи актуальной является версия 7.5.0.
Архитектура и принципы работы PowerShell
Архитектура PowerShell
Архитектура PowerShell основана на следующих компонентах:
- Командная оболочка
Представляет собой интерактивную командную строку, где пользователь может вводить команды для управления операционной системой и ее объектами.
- Язык сценариев
PowerShell использует свой собственный язык сценариев, который сочетает в себе возможности командной строки и полноценного языка программирования. Язык сценариев поддерживает переменные, циклы, условия, функции и модули.
- Платформа .NET
PowerShell построен на модульной платформе .NET, что позволяет ему взаимодействовать с объектами .NET и использовать их методы и свойства.
- Модули и провайдеры
Модули — это пакеты, содержащие команды и функции. Позволяют расширять функциональность PowerShell. Провайдеры — это компоненты, которые предоставляют доступ к данным в различных хранилищах (например, файловая система, реестр, переменные среды).
Принципы работы PowerShell
Принцип работы PowerShell основан на объектно-ориентированном подходе — в отличие от традиционных командных оболочек, которые работают с текстом, PowerShell работает с объектами. Каждая команда возвращает объект, который содержит свойства и методы. Это позволяет легко обрабатывать данные, передавать их между командами и использовать в скриптах.
Одной из мощных особенностей PowerShell является возможность передачи вывода одной команды (объектов) непосредственно в другую с помощью символа |
. Благодаря этому можно строить цепочки команд, где каждая команда обрабатывает или преобразует объекты, которые передаются дальше по цепочке.
Отличия PowerShell от командной строки (CMD)
Несмотря на схожесть, PowerShell и командная строка (CMD) — это два разных инструмента. PowerShell значительно мощнее и функциональнее обычной командной строки Windows. Основные отличия заключаются в следующем:
- Функционал
CMD поддерживает минимальный и ограниченный набор команд. Также с помощью CMD можно запускать скрипты с расширением .bat
. В свою очередь, PowerShell является объектно-ориентированной оболочкой и скриптовым языком и основан на модульной платформе .NET.
С помощью PowerShell можно выполнять как простые действия, связанные, например, с файлами и пакетами, так и сложные задачи управления реестром, службами, процессами и облачными ресурсами.
- Принцип работы
CMD работает с текстовыми командами (cd
, dir
, copy
, del
и т. д.) и обрабатывает строки с командами дальнейшей передачей в стандартный вывод.
PowerShell работает с объектами .NET, которые называются командлетами (cmdlets, например Get-Process
, Get-Service
, Stop-Process
и т. д.), что позволяет передавать сложные структуры данных между командами без необходимости парсинга текста.
- Автоматизация и запуск скриптов
С помощью CMD можно запускать скрипты с расширением .bat
, однако они ограничены в возможностях.
При помощи PowerShell можно запускать скрипты с расширением .ps1
, которые могут выполнять сложные операции, а также работать с API, базами данных и облачными сервисами.
vds
Установка PowerShell на Windows
Несмотря на то, что командная строка (cmd) и Powershell уже предустановлены во всех последних версиях Windows, PowerShell можно установить отдельно.
Отдельная установка может понадобиться, если предустановленная версия отличается от последней доступной актуальной версии.
Установить PowerShell в ОС Windows можно тремя разными способами:
- Через Microsoft Store (только для ОС Windows 10 и Windows 11).
- При помощи установочного файла с расширением
.msi
. - С помощью утилиты
winget
(winget
должен быть установлен отдельно).
Microsoft Store
Данный метод установки поддерживается только на Windows 10 и Windows 11. Процесс установки для двух дистрибутивов идентичен.
- Запускаем приложение Microsoft Store и в поиске вводим «powershell». Существует 2 версии PowerShell — Обычная (стабильная) и Preview. Версия Preview является тестовой и может содержать ошибки, однако она позволяет ознакомиться с новым функционалом, который еще не доступен в обычной (стабильной) версии.
Мы установим обычную стабильную версию:
- Для установки нажимаем на кнопку «Получить» и дожидаемся завершения установочного процесса:
Для запуска введите «powershell» в поиске Windows.
Также стоит обратить внимание, что при установке старая версия PowerShell не будет удалена. Чтобы отличить новую установленную версию от старой, достаточно посмотреть на имя приложения — новая версия называется PowerShell, а старая версия (она же предустановленная) называется Windows PowerShell:
MSI-пакет
Это более универсальный способ установки, так как подходит для более широкого спектра дистрибутивов, включая Windows 10 сборки 1607 и выше, Windows 11, Windows Server 2016 и выше.
- Переходим на сайт «Майкрософт» и выбираем необходимый установщик в зависимости от используемой архитектуры — 64-битная, 86 (32-битная) или arm64:
- Далее запускаем скачанный файл и нажимаем на кнопку «Next».
- Выбираем место на диске куда будет установлен PowerShell или оставляем значение по умолчанию.
- При необходимости выбираем дополнительные опции:
-
- Add PowerShell to Path Environment Variable — добавляет полный путь до исполняемого файла PowerShell в системную переменную окружения PATH.
- Register Windows Event Logging Manifest — регистрирует событийный манифест (
PowerShellCore.EventManifest.dll
) в системе, что позволяет логировать ошибки и события PowerShell в «Просмотре событий Windows» (Event Viewer). - Enable PowerShell remoting — включает функцию PowerShell Remoting для управления компьютером удаленно при помощи WSMan (WinRM).
- Disable Telemetry — отключает сбор телеметрии.
- Add ‘Open here’ context menus to Explorer — добавляет пункт «Открыть в PowerShell» в контекстное меню проводника.
- Add ‘Run with PowerShell 7’ context menu for PowerShell files — добавляет пункт «Запуск с PowerShell 7» (Run with PowerShell 7) в контекстное меню для
.ps1
-файлов.
- Далее установщик предложит включить использование службы Microsoft Update для получения актуальной версии PowerShell. Можно как согласиться, так и полностью отказаться от данной службы:
- На последнем шаге нажимаем на кнопку «Install, чтобы запустить процесс установки.
- После того как установка будет завершена, нажимаем на кнопку Finish».
Для запуска PowerShell необходимо ввести имя программы в поиске. Установленная версия будет содержать цифру основной версии и архитектуру, в то время как предустановленная версия содержит только название:
Так выглядит окно запущенного PowerShell:
Предустановленная версия PowerShell не будет удалена, что означает возможность использования обеих версий на одном компьютере.
winget
winget (Windows Package Manager) — это встроенный менеджер пакетов в Windows 10 и Windows 11, который позволяет легко устанавливать, обновлять и удалять программы через командную строку. Является аналогом apt
/ yum
/ dnf
в Linux-дистрибутивах.
По умолчанию winget
уже предустановлен в Windows 10 1809 (сборка 17763) и выше, а также во всех версиях Windows 11. Windows Server 2019 не поддерживается, однако возможна установка на Windows Server 2022. Чтобы проверить, установлен ли winget
в вашей версии Windows, необходимо выполнить следующую команду в PowerShell:
Get-AppPackage *Microsoft.DesktopAppInstaller*|select Name,PackageFullName
Если в ответ команда вернула имя пакета, как на скриншоте выше, то winget
уже установлен в системе. Если же winget
не установлен, его необходимо установить вручную:
- Переходим на страницу проекта в GitHub.
- Находим в разделе «Releases» последний релиз — с пометкой
latest
. В данном случае это релиз с номером 1.9.25200. Скачиваем файл с расширением.msixbundle
:
winget
входит в состав приложения «Установщик приложения», которое уже может быть установлено в вашей системе. Если при запуске установочного файла отображается сообщение, что такое приложение уже установлено, значит,winget
уже присутствует в системе:
- Если же «Установщик приложения» отсутствует, установите его вручную, следуя инструкциям на экране. После завершения установки можно проверить версию
winget
и убедиться, что программа была установлена:
winget --version
- Для установки PowerShell сначала выясним, какие версии доступны.
winget search Microsoft.PowerShell
Как и при установке из магазина Windows, доступны две версии: обычная (стабильная) и Preview (бета-версия).
- Установим обычную версию при помощи команды:
winget install --id Microsoft.PowerShell --source winget
Как и при использовании других методов установки, установка новой версии PowerShell через winget не удаляет старую версию утилиты.
Основы работы с PowerShell
Рассмотрим синтаксис PowerShell и работу с командлетами (cmdlets).
Командлеты (cmdlets)
В основу PowerShell заложена работа с командлетами.
Командлеты — это встроенные команды, используемые для выполнения различных задач, таких как управление файлами, процессами, службами, пользователями и сетевыми настройками.
Синтаксис командлетов следующий:
<глагол>-<существительное> [-Параметры]
Например:
Get-Process
— Получить список процессовGet-ChildItem -Path C:\Users
— Отобразить файлы и директории в каталогеC:\Users
.
При использовании командлетов в ответ они возвращают не просто текст, а объекты платформы .NET. Это предоставляет мощные возможности для обработки данных.
Переменные
Как и в любом другом языке программирования или командной оболочке, переменные в PowerShell предназначены для хранения различных объектов: строк, чисел, объектов, массивов, хэш-таблиц. Переменные обозначаются знаком $
.
Рассмотрим переменные на практике. Объявим две переменные: одну с именем myvar1
и содержащую строковой тип данных, и вторую — с именем myvar2
и содержащую числовой тип данных:
$myvar1 = “This is string variable”
$myvar2 = 32
Для вывода значения переменной используется оператор Write-Output
:
Write-Output $myvar1
Write-Output $myvar2
PowerShell автоматически определяет тип данных, но при желании его можно задавать явно:
[string]$myvar1 = “This is string variable”
[int]$myvar2 = 32
Помимо хранения строковых и числовых данных, в переменных можно хранить массивы и хэш-таблицы (они же словари).
Создадим переменную var-array
, в которой будет храниться массив цифр от 1 до 5:
$var_array = @(1, 2, 3, 4, 5)
Чтобы вывести значения объектов, хранящихся в массиве, необходимо написать имя переменной и в квадратных скобках указать порядковый номер объекта. Как и в других языках программирования, счет объектов начинается с 0, поэтому для вывода цифры 1 необходимо ввести 0:
$var_array[0]
Создадим другую переменную с именем var-hash
, в которой будет храниться хэш-таблица или словарь данных. Структура данных имеет вид: Ключ: Значение
.
$var_hash = @{ "ID" = 1; "Name" = "Alex" }
Для вывода значений необходимо указать имя переменной и ключ, например:
$var_hash["Name"]
Также с переменными можно производить различные арифметические операции, например, сложение:
$first_num = 20
$second_num = 30
$sum = $first_num + $second_num
Write-Output $sum
Операторы
В PowerShell присутствуют следующие операторы:
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Операторы массивов
Рассмотрим их на практике.
Арифметические операторы
Используются для математических вычислений. В таблице ниже перечислены все арифметические операторы, доступные в PowerShell:
Оператор |
Описание |
+ |
Сложение |
— |
Вычитание |
* |
Умножение |
/ |
Деление |
% |
Остаток от деления |
$a = 15
$b = 10
$c = $a + $b # Сложение
$d = $a - $b # Вычитание
$e = $a * $b # Умножение
$f = $a / $b # Деление
$g = $a % $b # Остаток от деления
Write-Output $c
Write-Output $d
Write-Output $e
Write-Output $f
Write-Output $g
Операторы сравнения
Используются для проверки условий. В таблице ниже перечислены все операторы сравнения, доступные в PowerShell:
Оператор |
Описание |
-eq |
Равно |
-ne |
Не равно |
-gt |
Больше |
-ge |
Больше или равно |
-lt |
Меньше |
-le |
Меньше или равно |
$c = 25
$d = 45
$c -eq $d # Равно (Equal)
$c -ne $d # Не равно (Not Equal)
$c -gt $d # Больше (Greater Than)
$c -lt $d # Меньше (Less Than)
$c -ge $d # Больше или равно (Greater or Equal)
$c -le $d # Меньше или равно (Less or Equal)
Логические операторы
Применяются в условиях. В таблице ниже перечислены все логические операторы, доступные в PowerShell:
Оператор |
Описание |
-and |
Логическое И |
-or |
Логическое ИЛИ |
-not или ! |
Логическое НЕ |
($a -gt 5) -and ($b -lt 10) # Логическое "И"
($a -gt 5) -or ($b -gt 10) # Логическое "ИЛИ"
-not ($a -eq $b) # Логическое "НЕ"
Условные конструкции
Условные конструкции в PowerShell — это механизмы, позволяющие выполнять код в зависимости от выполнения определенных условий. Они позволяют программе принимать решения, что делает скрипты более гибкими в использовании.
Операторы if elseif else
Используются для выполнения кода в зависимости от условия. Рассмотрим использование операторов на примере ниже:
$number = 10
if ($number -gt 5) {
Write-Output "Число больше 5"
} elseif ($number -eq 5) {
Write-Output "Число равно 5"
} else {
Write-Output "Число меньше 5"
}
Циклы
Циклы используются для повторного выполнения блока кода, пока выполняется определенное условие. В PowerShell есть несколько видов циклов:
for
— классический цикл с итератором.foreach
— перебирает элементы массива или коллекции.while
— выполняется, пока условие истинно.do-while
— выполняется хотя бы один раз, затем проверяет условие.do-until
— выполняется, пока условие ложно.
Цикл for
Используется, когда известно количество итераций.
for ($i=0; $i -lt 5; $i++) {
Write-Output "Итерация $i"
}
Цикл while
Выполняется, пока условие остается True (пока условие истинно).
$count = 0
while ($count -lt 3) {
Write-Output "Счетчик: $count"
$count++
}
Цикл foreach
Используется для перебора элементов массива.
$numbers = @(1,2,3,4,5)
foreach ($num in $numbers) {
Write-Output "Число: $num"
}
Цикл do-while
Гарантирует хотя бы одну итерацию (сначала выполняет, потом проверяет).
$i = 0
do {
Write-Output "Число $i"
$i++
} while ($i -lt 5)
Цикл do-until
Выполняется до тех пор, пока условие не станет True.
$i = 1
do {
Write-Output "Итерация: $i"
$i++
} until ($i -gt 3)
Функции
Функции в PowerShell позволяют объединять блоки кода и многократно их использовать. Они могут принимать параметры и возвращать значения.
Функции создаются с помощью ключевого слова function
:
function SayHello {
Write-Output "Привет, PowerShell!"
}
SayHello
Функция с параметром
function Greet($name) {
Write-Output "Привет, $name!"
}
Greet "Иван"
Функция с несколькими параметрами
function SumNumbers($a, $b) {
return $a + $b
}
$result = SumNumbers 5 10
Write-Output "Сумма: $result"
Работа с файлами и директориями
PowerShell отлично подходит для работы с файлами и директориями. Рассмотрим некоторые полезные команды для работы в ОС Windows.
- Получение списка файлов
Get-ChildItem C:\Users
- Создание папки
New-Item -Path "C:\TestFolder" -ItemType Directory
- Создание файла
New-Item -Path "C:\TestFolder\file.txt" -ItemType File
- Запись в файл
Set-Content -Path "C:\TestFolder\file.txt" -Value "Hello, world!"
- Чтение файла
Get-Content "C:\TestFolder\file.txt"
- Копирование файла
Copy-Item -Path "C:\TestFolder\file.txt" -Destination "C:\Users\file.txt"
- Перемещение файла
Для выполнения команды ниже PowerShell необходимо запустить с правами администратора, иначе при выполнении будет ошибка.
Move-Item -Path "C:\TestFolder\file.txt" -Destination "C:\Windows\file.txt"
- Удаление файла
Remove-Item -Path "C:\TestFolder\file.txt"
Работа с процессами и службами
- Получение списка процессов
Get-Process
- Завершение процесса
Например, завершим процесс «Блокнот»:
Stop-Process -Name notepad -Force
- Получение списка служб
Get-Service
- Запуск службы
Для примера запустим службу wuauserv
:
Start-Service -Name wuauserv
- Остановка службы
Stop-Service -Name wuauserv
Автоматизация задач с помощью PowerShell
PowerShell идеально подходит для автоматизации многих задач в Windows. Рассмотрим несколько примеров.
Мониторинг процесса и его автоматический перезапуск
Первая задача, которую мы рассмотрим, заключается в отслеживании процесса и его автоматическом перезапуске, если он перестанет отвечать:
$processName = "notepad"
while ($true) {
if (-not (Get-Process -Name $processName -ErrorAction SilentlyContinue)) {
Write-Output "$processName не работает! Перезапуск..."
Start-Process $processName
}
Start-Sleep -Seconds 10
}
Скрипт выше проверяет, запущен ли процесс notepad
(«Блокнот»). Если процесс не найден, то запускает его и проверяет его статус каждые 10 секунд.
Удаление старых файлов
Удаление старых и неактуальных файлов может освободить место на диске. В примере ниже скрипт удаляет файлы, которые старше одного дня, в директории C:\TestFolder
:
$folder = "C:\TestFolder"
$days = 1
$limit = (Get-Date).AddDays(-$days)
Get-ChildItem -Path $folder -Recurse | Where-Object { $_.LastWriteTime -lt $limit } | Remove-Item -Force
Write-Output "Удалены файлы старше $days дней"
Запуск процесса по расписанию
Настроим автоматический запуск программы «Блокнот» каждый день в 9:00 утра:
$action = New-ScheduledTaskAction -Execute "notepad.exe"
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -TaskName "OpenNotepad" -Action $action -Trigger $trigger
Write-Output "Задача добавлена в планировщик!"
Безопасность в PowerShell
PowerShell обладает встроенным функционалом по обеспечению безопасности. Рассмотрим его более подробно.
Политики выполнения (Execution Policies)
По умолчанию PowerShell блокирует выполнение скриптов. Чтобы проверить текущую политику, необходимо использовать команду:
Get-ExecutionPolicy
Типы политик встроенных в PowerShell:
Restricted
— Запрещено выполнять скрипты (по умолчанию).AllSigned
— Разрешает только подписанные скрипты.RemoteSigned
— Локальные скрипты выполняются, загруженные из сети должны быть подписаны.Unrestricted
— Можно запускать любые скрипты, но при запуске загруженных файлов появляется предупреждение.Bypass
— Полностью отключает защиту (НЕ рекомендуется).
Для изменения политики требуются права администратора. Команда для изменения следующая:
Set-ExecutionPolicy Unrestricted
Подписание скриптов
Чтобы предотвратить запуск вредоносного кода в скриптах, в PowerShell присутствует возможность подписания скриптов.
Заранее создаем тестовый скрипт в директории C:\TestFolder
со следующим содержимым:
$path = "C:\Users"
if (Test-Path $path) {
try {
Get-ChildItem -Path $path -Force
} catch {
Write-Host "Access denied to $path"
}
} else {
Write-Host "The path does not exist: $path"
}
Сохраняем файл с именем и расширением script.ps1
.
Далее подписываем скрипт:
- Создаем самоподписанный сертификат:
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=MyPowerShellCert" -KeyUsage DigitalSignature -KeySpec Signature -NotAfter (Get-Date).AddYears(5) -CertStoreLocation "Cert:\CurrentUser\My"
- Выведем данные сертификата. В частности, нам необходим его Thumbprint (отпечаток), который пригодится далее.
Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
- Теперь необходимо добавить сгенерированный сертификат в папку корневых сертификатов. Открываем «Диспетчер сертификатов» через PowerShell:
certmgr.msc
- Переходим в раздел «Personal» (сертификаты пользователя), кликаем по нужному сертификату правой кнопкой мыши и выбираем пункт «Export» (Экспорт):
- В открывшемся меню нажимаем на кнопку «Next». Выбираем параметр «Не экспортировать закрытый ключ»:
Выбираем формат Base-64:
Нажимаем «Next».
Дальше нажимаем на кнопку «Browse» и выбираем директорию, куда будет сохранен сертификат.
Нажимаем «Finish», чтобы завершить экспорт.
- Открываем сертификат и нажимаем на кнопку «Install Certificate…»:
Выбираем пункт для текущего пользователя:
Для установки в конкретное хранилище сертификатов выбираем пункт «Place all certificates in the following store»:
Выбираем «Trusted Root Certification Authorities»:
Завершаем установку сертификата нажатием на кнопку «Finish».
- При появлении окна с предупреждением нажимаем «Yes»:
- Подписываем скрипт
script.ps1
, размещенный в директорииC:\TestFolder.
Для этого вводим ранее полученный отпечаток после опцииThumbprint -eq
.
$cert = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object { $_.Thumbprint -eq "B8D1657CD8D09A2B80BEFEEF378C17DA2FE41352" }
Set-AuthenticodeSignature -FilePath "C:\TestFolder\script.ps1" -Certificate $cert
- Проверяем, что скрипт был успешно подписан:
Get-AuthenticodeSignature -FilePath "C:\TestFolder\script.ps1"
Подпись был успешно создана.
- Запустим скрипт:
Теперь попробуем запустить неподписанный скрипт при использовании политики AllSigned
, разрешающей запуск только подписанных скриптов.
Меняем политику на AllSigned
:
Set-ExecutionPolicy AllSigned -Scope CurrentUser
Создаем новый скрипт и попытаемся его запустить:
Система вернула ошибку, так как скрипт не подписан.
Заключение
Сегодня мы познакомились с командной оболочкой PowerShell и ее синтаксисом. PowerShell — это мощный инструмент автоматизации в операционных системах Windows, который упрощает работу со множеством задач от создания резервных копий до планировщика задач и работы с файлами.