Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Scripts

Сила PowerShell, часть 1

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called The Power of PowerShell.
The Power of PowerShell, Part 2

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

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

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

Установка PowerShell

Если вы работаете на Windows 10, вы можете пропустить это. В противном случае загрузите его с веб-сайта Microsoft.

После установки PowerShell первое, что вы хотите сделать, - включить выполнение скрипта. Запустите PowerShell от имени администратора и введите: Set-ExecutionPolicy RemoteSigned. Вам нужно сделать это только один раз. Теперь обновите файлы справки: Update-Help -Force.

Классные штуки, которые вы можете сделать с PowerShell

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

Воспроизвести видео

Вот классная строчка для воспроизведения видеофайлов (или любых медиа-файлов):

(New-object –COM WMPlayer.OCX).openPlayer("Path to your video")

Он откроет окно медиаплеера и сразу начнет проигрывать ваше видео.

Здесь Строки

PowerShell имеет одно из самых читаемых и визуально привлекательных решений для многострочных строк - AKA «here strings». Вы просто начинаете с @" и заканчиваете "@. Обратите внимание, что начальный и конечный маркеры должны находиться на отдельной строке, отдельно от промежуточного содержимого. Вот пример:

Генерировать случайные числа

Выберите случайное число от 1 до 100:

1..50 | Get-Random

Это простой конвейер. Левая сторона может генерировать все целые числа от 1 до 50 (включительно), а затем она передается в командлет Get-Random, который выбирает одно из них.

Работа с буфером обмена

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

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

Говорить

PowerShell тоже может говорить!

Получить все запущенные виртуальные машины

Вот небольшой конвейер для перечисления всех запущенных виртуальных машин:

Get-VM | Where-Object {$ _. State -eq "Running"}

Показать индикатор выполнения

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

История PowerShell

PowerShell 1.0 был выпущен в 2006 году, но его изобретатель Джеффри Сновер начал работать над ним гораздо раньше. Проверьте манифест 2002 года. PowerShell прошел долгий путь. Windows была далеко позади с точки зрения средств командной строки. Системным администраторам и опытным пользователям приходилось обходиться скудными предложениями cmd.exe и пакетных файлов. Было несколько слабых попыток улучшить ситуацию с хостами сценариев Windows, которые позволяли создавать сценарии системных объектов с использованием VBScript или JScript, но с этим подходом было много проблем.

PowerShell изменил все это и очень быстро. Он не только соответствовал возможностям командной строки * nix-сред, но и обогнал многие инновации, беспрецедентную согласованность и простоту использования.

Сегодня PowerShell находится на версии 5.1. С годами и версиями возможности PowerShell и среды хостинга значительно выросли.

PowerShell 1.0 поддерживает локальное администрирование компьютеров Windows (включая Windows Server 2003).

PowerShell 2.0 был интегрирован с Windows 7 и Windows Server 2008 R2. В него добавлена поддержка удаленного взаимодействия и значительно расширены возможности PowerShell с фоновыми заданиями, транзакциями, событиями, отладкой, средой разработки графического интерфейса и множеством новых командлетов.

PowerShell 3.0 был выпущен как часть инфраструктуры управления Windows. Он был установлен на Windows 8 и Windows Server 2012. В него добавлены запланированные задания, возможность подключения к сеансам, автоматическая загрузка модулей и множество новых команд.

PowerShell 4.0 был интегрирован с Windows 8.1 и Windows Server 2012 R2. Добавлена поддержка конфигурации желаемого состояния, улучшена отладка, диагностика сети и переключатель -PipelineVariable.

PowerShell 5.0 был выпущен как часть среды управления Windows 5. PowerShell 5.1 был выпущен как часть юбилейных обновлений Windows 10. Новые функции включают определения классов PowerShell, перечисления .NET, фоновые задания удаленной отладки и отладки, диспетчер локальной конфигурации DSC и многие другие улучшения DSC.

PowerShell: язык сценариев

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

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

Процедурные сценарии

Для процедурного программирования вам нужны функции, условия и циклы. PowerShell имеет все это. Операторы сравнения могут вас удивить, поскольку они не используют типичные символы. Вместо этого у вас есть: -eq (равно), -lt (меньше), -gt (больше), -ge (больше или равно) и т.д.

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

В PowerShell имеется множество средств и командлетов для работы с коллекциями, а также для их нарезки, поэтому циклы не часто бывают нужны. Но, на всякий случай, если вы так склонны, в PowerShell есть множество петлевых конструкций. Вы можете использовать циклы For, циклы ForEach, циклы While, циклы Do-While и даже специальные циклы ForEach-Object. Вот несколько примеров.

Функциональное программирование

PowerShell - это все о функциональном программировании. Конвейер представляет собой функциональную среду выполнения, в которой вы динамически составляете функции/командлеты. Вы можете сделать это в интерактивном режиме или в сценарии. Если вы хотите сделать явное функциональное программирование, вы можете сделать это тоже, но синтаксис немного громоздок. Проверьте эту статью: Функциональное программирование в PowerShell.

Объектно-ориентированное программирование

Вы уже видели, как использовать объекты .NET и объекты, проходящие через конвейер. Давайте определим класс в PowerShell и сделаем некоторые базовые ОО. Здесь я создаю класс для игрового персонажа со здоровьем и броней, который может получать урон и вычислять его здоровье. Существует также метод IsAlive(), который проверяет, является ли health>0. Я использую конструктор.

Обратите внимание, что вы должны создавать экземпляры классов PowerShell, используя [<class name>]::new(). Синтаксис New-Object не поддерживается в PowerShell 5.1.

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

Интерактивная среда сценариев

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

Заключение

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

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.