Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Windows PowerShell: принципы работы и основные возможности

1686
20 минут чтения
Средний рейтинг статьи: 4

Первые версии Linux- и Unix-дистрибутивов традиционно управлялись при помощи командной строки. Несмотря на то, что со временем были выпущены различные графические оболочки, такие как GNOME, KDE, Cinnamon, XFCE, Linux стал прочно ассоциироваться с управлением через терминал. В то же время операционные системы семейства Windows ассоциируются именно с использованием графического интерфейса. Однако, существует способ, при котором можно управлять ОС Windows из командной оболочки, — с помощью инструмента PowerShell. Сегодня мы рассмотрим синтаксис и основы работы с 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 и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Установка PowerShell на Windows

Несмотря на то, что командная строка (cmd) и Powershell уже предустановлены во всех последних версиях Windows, PowerShell можно установить отдельно. 

Отдельная установка может понадобиться, если предустановленная версия отличается от последней доступной актуальной версии. 

Установить PowerShell в ОС Windows можно тремя разными способами:

  • Через Microsoft Store (только для ОС Windows 10 и Windows 11).
  • При помощи установочного файла с расширением .msi.
  • С помощью утилиты winget (winget должен быть установлен отдельно).

Данный метод установки поддерживается только на Windows 10 и Windows 11. Процесс установки для двух дистрибутивов идентичен.

  1. Запускаем приложение Microsoft Store и в поиске вводим «powershell». Существует 2 версии PowerShell — Обычная (стабильная) и Preview. Версия Preview является тестовой и может содержать ошибки, однако она позволяет ознакомиться с новым функционалом, который еще не доступен в обычной (стабильной) версии. 

Мы установим обычную стабильную версию:

Image11

  1. Для установки нажимаем на кнопку «Получить» и дожидаемся завершения установочного процесса:

Image21

Для запуска введите «powershell» в поиске Windows.

Также стоит обратить внимание, что при установке старая версия PowerShell не будет удалена. Чтобы отличить новую установленную версию от старой, достаточно посмотреть на имя приложения — новая версия называется PowerShell, а старая версия (она же предустановленная) называется Windows PowerShell:

Image3

Основы работы с PowerShell

Рассмотрим синтаксис PowerShell и работу с командлетами (cmdlets).

Командлеты (cmdlets)

В основу PowerShell заложена работа с командлетами.

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

Синтаксис командлетов следующий:

    

Например:

  • Get-Process — Получить список процессов
  • Get-ChildItem -Path C:\Users — Отобразить файлы и директории в каталоге C:\Users.

При использовании командлетов в ответ они возвращают не просто текст, а объекты платформы .NET. Это предоставляет мощные возможности для обработки данных.

Переменные

Как и в любом другом языке программирования или командной оболочке, переменные в PowerShell предназначены для хранения различных объектов: строк, чисел, объектов, массивов, хэш-таблиц. Переменные обозначаются знаком $

Рассмотрим переменные на практике. Объявим две переменные: одну с именем myvar1 и содержащую строковой тип данных, и вторую — с именем myvar2 и содержащую числовой тип данных:

    

Image54

Для вывода значения переменной используется оператор Write-Output:

    

Image47

PowerShell автоматически определяет тип данных, но при желании его можно задавать явно:

    

Image36

Помимо хранения строковых и числовых данных, в переменных можно хранить массивы и хэш-таблицы (они же словари).

Создадим переменную var-array, в которой будет храниться массив цифр от 1 до 5:

    

Чтобы вывести значения объектов, хранящихся в массиве, необходимо написать имя переменной и в квадратных скобках указать порядковый номер объекта. Как и в других языках программирования, счет объектов начинается с 0, поэтому для вывода цифры 1 необходимо ввести 0:

    

Image48

Создадим другую переменную с именем var-hash, в которой будет храниться хэш-таблица или словарь данных. Структура данных имеет вид: Ключ: Значение.

    

Для вывода значений необходимо указать имя переменной и ключ, например:

    

Image29

Также с переменными можно производить различные арифметические операции, например, сложение:

    

Image37

Операторы

В PowerShell присутствуют следующие операторы:

  • Арифметические операторы
  • Операторы сравнения
  • Логические операторы
  • Операторы массивов

Рассмотрим их на практике.

Арифметические операторы

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

Оператор

Описание

+

Сложение

-

Вычитание

*

Умножение

/

Деление

%

Остаток от деления

    

Image53

Операторы сравнения

Используются для проверки условий. В таблице ниже перечислены все операторы сравнения, доступные в PowerShell:

Оператор

Описание

-eq

Равно

-ne

Не равно

-gt

Больше

-ge

Больше или равно

-lt

Меньше

-le

Меньше или равно

    

Image49

Логические операторы

Применяются в условиях. В таблице ниже перечислены все логические операторы, доступные в PowerShell:

Оператор

Описание

-and

Логическое И

-or

Логическое ИЛИ

-not или !

Логическое НЕ

    

Image43

Условные конструкции

Условные конструкции в PowerShell — это механизмы, позволяющие выполнять код в зависимости от выполнения определенных условий. Они позволяют программе принимать решения, что делает скрипты более гибкими в использовании.

Операторы if elseif else

Используются для выполнения кода в зависимости от условия. Рассмотрим использование операторов на примере ниже:

    

Image24

Циклы

Циклы используются для повторного выполнения блока кода, пока выполняется определенное условие. В PowerShell есть несколько видов циклов:

  • for — классический цикл с итератором.
  • foreach — перебирает элементы массива или коллекции.
  • while — выполняется, пока условие истинно.
  • do-while — выполняется хотя бы один раз, затем проверяет условие.
  • do-until — выполняется, пока условие ложно.

Цикл for

Используется, когда известно количество итераций.

    

Image61

Цикл while

Выполняется, пока условие остается True (пока условие истинно).

    

Image38

Цикл foreach

Используется для перебора элементов массива.

    

Image50

Цикл do-while

Гарантирует хотя бы одну итерацию (сначала выполняет, потом проверяет).

    

Image20

Цикл do-until

Выполняется до тех пор, пока условие не станет True.

    

Image28

Функции

Функции в PowerShell позволяют объединять блоки кода и многократно их использовать. Они могут принимать параметры и возвращать значения. 

Функции создаются с помощью ключевого слова function:

    

Image31

Функция с параметром

    

Image64

Функция с несколькими параметрами

    

Image34

Работа с файлами и директориями

PowerShell отлично подходит для работы с файлами и директориями. Рассмотрим некоторые полезные команды для работы в ОС Windows.

  • Получение списка файлов
    

Image7

  • Создание папки
    

Image9

  • Создание файла
    

Image10

  • Запись в файл
    

Image5

  • Чтение файла
    

Image57

  • Копирование файла
    

Image6

  • Перемещение файла

Для выполнения команды ниже PowerShell необходимо запустить с правами администратора, иначе при выполнении будет ошибка.

    

Image41

  • Удаление файла
    

Image46

Работа с процессами и службами

  • Получение списка процессов
    

Image26

  • Завершение процесса

Например, завершим процесс «Блокнот»:

    

Image8

  • Получение списка служб
    

Image27

  • Запуск службы 

Для примера запустим службу wuauserv:

    

Image65

  • Остановка службы
    

Image25

Автоматизация задач с помощью PowerShell

PowerShell идеально подходит для автоматизации многих задач в Windows. Рассмотрим несколько примеров.

Мониторинг процесса и его автоматический перезапуск

Первая задача, которую мы рассмотрим, заключается в отслеживании процесса и его автоматическом перезапуске, если он перестанет отвечать:

    

Image32

Скрипт выше проверяет, запущен ли процесс notepad («Блокнот»). Если процесс не найден, то запускает его и проверяет его статус каждые 10 секунд.

Удаление старых файлов

Удаление старых и неактуальных файлов может освободить место на диске. В примере ниже скрипт удаляет файлы, которые старше одного дня, в директории C:\TestFolder:

    

Image30

Запуск процесса по расписанию

Настроим автоматический запуск программы «Блокнот» каждый день в 9:00 утра:

    

Image55

Безопасность в PowerShell

PowerShell обладает встроенным функционалом по обеспечению безопасности. Рассмотрим его более подробно.

Политики выполнения (Execution Policies)

По умолчанию PowerShell блокирует выполнение скриптов. Чтобы проверить текущую политику, необходимо использовать команду:

    

Image16

Типы политик встроенных в PowerShell:

  • Restricted — Запрещено выполнять скрипты (по умолчанию).
  • AllSigned — Разрешает только подписанные скрипты.
  • RemoteSigned — Локальные скрипты выполняются, загруженные из сети должны быть подписаны.
  • Unrestricted — Можно запускать любые скрипты, но при запуске загруженных файлов появляется предупреждение.
  • Bypass — Полностью отключает защиту (НЕ рекомендуется).

Для изменения политики требуются права администратора. Команда для изменения следующая:

    

Image15

Подписание скриптов

Чтобы предотвратить запуск вредоносного кода в скриптах, в PowerShell присутствует возможность подписания скриптов. 

Заранее создаем тестовый скрипт в директории C:\TestFolder со следующим содержимым:

    

Сохраняем файл с именем и расширением script.ps1.

Далее подписываем скрипт:

  1. Создаем самоподписанный сертификат:
    

Image56

  1. Выведем данные сертификата. В частности, нам необходим его Thumbprint (отпечаток), который пригодится далее.
    

Image1

  1. Теперь необходимо добавить сгенерированный сертификат в папку корневых сертификатов. Открываем «Диспетчер сертификатов» через PowerShell:
    

Image45

  1. Переходим в раздел «Personal» (сертификаты пользователя), кликаем по нужному сертификату правой кнопкой мыши и выбираем пункт «Export» (Экспорт):

Image67

  1. В открывшемся меню нажимаем на кнопку «Next». Выбираем параметр «Не экспортировать закрытый ключ»:

Image22

Выбираем формат Base-64:

Image44

Нажимаем «Next».

Дальше нажимаем на кнопку «Browse» и выбираем директорию, куда будет сохранен сертификат.

Нажимаем «Finish», чтобы завершить экспорт.

  1. Открываем сертификат и нажимаем на кнопку «Install Certificate...»:

Image18

Выбираем пункт для текущего пользователя:

Image63

Для установки в конкретное хранилище сертификатов выбираем пункт «Place all certificates in the following store»:

Image52

Выбираем «Trusted Root Certification Authorities»:

Image66

Завершаем установку сертификата нажатием на кнопку «Finish».

  1. При появлении окна с предупреждением нажимаем «Yes»:

Image35

  1. Подписываем скрипт script.ps1, размещенный в директории C:\TestFolder. Для этого вводим ранее полученный отпечаток после опции Thumbprint -eq.
    
    

Image33

  1. Проверяем, что скрипт был успешно подписан:
    

Image2

Подпись был успешно создана.

  1. Запустим скрипт:

Image14

Теперь попробуем запустить неподписанный скрипт при использовании политики AllSigned, разрешающей запуск только подписанных скриптов. 

Меняем политику на AllSigned:

    

Создаем новый скрипт и попытаемся его запустить:

Image40

Система вернула ошибку, так как скрипт не подписан.

Надежные VDS/VPS для ваших проектов

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

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

1686
20 минут чтения
Средний рейтинг статьи: 4
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server