|
|
@@ -0,0 +1,123 @@
|
|
|
+# PowerShell
|
|
|
+
|
|
|
+PowerShell — это кроссплатформенная оболочка командной строки и язык сценариев, созданная Microsoft, в первую очередь для задач автоматизации и конфигурации. Это не просто замена cmd.exe, это мощная среда, построенная на .NET.
|
|
|
+Оболочка: Интерактивная среда, где вы вводите команды и немедленно получаете результат.
|
|
|
+Язык сценариев: Позволяет писать сложные скрипты (.ps1 файлы) для автоматизации многократных задач.
|
|
|
+Платформа: Предоставляет богатый набор встроенных команд и позволяет управлять практически всеми аспектами ОС Windows, облачных сервисов (Azure, AWS), VMware, Docker и многого другого.
|
|
|
+
|
|
|
+
|
|
|
+# Эволюция
|
|
|
+
|
|
|
+PowerShell Core (начиная с версии 6.0) стал кардинальным пересмотром архитектуры PowerShell. Основные изменения включали:
|
|
|
+Переход на .NET Core — отказ от .NET Framework открыл путь к кроссплатформенной разработке.
|
|
|
+Открытый исходный код — весь проект PowerShell Core размещён на GitHub, что
|
|
|
+способствует активному участию сообщества.
|
|
|
+Совместимость с Linux и macOS — появление возможности писать универсальные скрипты для различных операционных систем.
|
|
|
+В версии PowerShell 7 (также известной как PowerShell Core 7) был сделан акцент на повышенную совместимость с модулями Windows PowerShell, что стало важным шагом в сторону объединения усилий и устранения фрагментации.
|
|
|
+
|
|
|
+
|
|
|
+# Философия и Основные Концепции
|
|
|
+
|
|
|
+PowerShell построен на нескольких ключевых принципах:
|
|
|
+Основан на .NET: Каждая команда в PowerShell в конечном счете взаимодействует с классами и объектами .NET Framework/.NET Core.
|
|
|
+Объектно-ориентированный: В отличие от традиционных оболочек (bash, cmd), которые работают с текстом, PowerShell работает с объектами, имеющими свойства и методы.
|
|
|
+Единообразие: Имена команд следуют единому шаблону Глагол-Существительное (например, Get-Service, Stop-Process).
|
|
|
+Открытость и Расширяемость: Легко создавать свои собственные команды, модули и провайдеры.
|
|
|
+
|
|
|
+# Что такое командлет?
|
|
|
+
|
|
|
+В основе взаимодействия с PowerShell лежат объекты, а не текст, как у CMD.EXE и командных интерпретаторов в *nix-системах. Такой подход меняет взгляд на организацию встроенных команд.
|
|
|
+Командлет — это встроенная команда в PowerShell, выполняющая одну задачу и реализованная на .NET. Имя командлета соответствует правилу Глагол-Существительное, которое можно читать как Действие-Объект.
|
|
|
+Самый важный командлет, о котором необходимо узнать в первую очередь, — Get-Help. Он отображает справочную информацию о PowerShell и командлетах.
|
|
|
+Получить общую справку по PowerShell
|
|
|
+Get-Help
|
|
|
+Получить справку по командлету Get-Content
|
|
|
+Get-Help Get-Content
|
|
|
+Получить справку по командлету Get-Help
|
|
|
+Get-Help Get-Help
|
|
|
+Если вам кажется, что использовать большие буквы в названии командлетов — это перебор, для вас есть хорошие новости. Все команды в PowerShell являются регистронезависимыми. Иными словами, перечисленные ниже написания эквивалентны:
|
|
|
+Get-Help Get-Help
|
|
|
+get-help get-help
|
|
|
+GET-HELP GET-HELP
|
|
|
+GeT-hElP gEt-HeLp
|
|
|
+Хотя Windows PowerShell нечувствительна к регистру в именах и параметрах, внешние программы, которые вызываются через оболочку, могут не обладать такими возможностями.
|
|
|
+В первой версии PowerShell все командлеты были реализованы на .NET, но начиная с версии 2.0 появилась возможность писать командлеты с использованием синтаксиса Power
|
|
|
+
|
|
|
+# Синтаксис
|
|
|
+
|
|
|
+Синтаксис PowerShell похож на синтаксис других командных интерпретаторов. Сначала команда, а затем аргументы команды. Несколько команд в одной строке разделяются точкой с запятой. Рассмотрим на примере.
|
|
|
+Get-Help Get-Command -Online
|
|
|
+Данная команда откроет в браузере вкладку с описанием командлета Get-Command в базе знаний Microsoft. Разберем подробнее:
|
|
|
+Get-Help – команда, в данном случае командлет,
|
|
|
+Get-Command – первый позиционный аргумент, который передается командлету,
|
|
|
+-Online – ключ, то есть именованный аргумент.
|
|
|
+Обратите внимание, что в CMD.EXE именованные аргументы, то есть ключи, для встроенных команд начинались с символа слэш (/). У командлетов аргументы начинаются со знака минус. Использование знака / в PowerShell недопустимо и будет интерпретировано как ошибка.
|
|
|
+Хотя PowerShell во многом похож на CMD.EXE, он имеет несколько существенных отличий. Во-первых, обращение к переменным производится через символ доллар, а не через знак процента. Во-вторых, PowerShell позволяет определять функции. Например:
|
|
|
+function Get-Version {
|
|
|
+ $PSVersionTable.PSVersion
|
|
|
+}
|
|
|
+Данный код объявит функцию Get-Version, которая обращается к системной переменной (объекту) PSVersionTable и возвращает значение поля PSVersion. Проще говоря, выводит версию PowerShell.
|
|
|
+Именование командлетов может быть неочевидным для администраторов с опытом работы с другими командными интерпретаторами. Поэтому рассмотрим основные команды Windows PowerShell.
|
|
|
+
|
|
|
+# Основные команды языка Windows PowerShell
|
|
|
+
|
|
|
+В следующей таблице перечислены основные команды PowerShell и их аналоги в *nix-подобных системах и CMD.EXE. В версии PowerShell 7 количество командлетов превышает полторы тысячи!
|
|
|
+Get-Location (псевдоним — pwd) — pwd. Выводит путь до текущего каталога.
|
|
|
+Set-Location (псевдоним — cd) — cd. Меняет текущий каталог.
|
|
|
+Get-ChildItem (псевдоним — ls) — ls. Выводит содержимое текущего каталога.
|
|
|
+Get-ChildItem find — find. Производит поиск файлов по заданным критериям.
|
|
|
+Copy-Item (псевдоним — cp) — cp. Копирует файл.
|
|
|
+Remove-Item (псевдоним — rm) — rm. Удаляет файл.
|
|
|
+New-Item (псевдоним — mkdir) — mkdir. Создаёт каталог.
|
|
|
+New-Item touch — создаёт пустой файл.
|
|
|
+Get-Content (псевдоним — cat) — cat. Выводит файлы.
|
|
|
+Where-Object grep — производит фильтрацию.
|
|
|
+Create-Volume Format-Volume mkfs — форматирует раздел.
|
|
|
+Test-Connection (псевдоним — ping) — ping.exe. Отправляет ICMP-запросы, «пингует».
|
|
|
+Get-Help (псевдоним — man) — man. Показывает справку.
|
|
|
+После работы в консоли *nix командлет для популярного действия, смены каталога, выглядит громоздко и непривычно. К счастью, командлеты имеют псевдонимы (алиасы), которые могут не следовать правилу именования командлетов. Список известных псевдонимов можно получить с помощью командлета Get-Alias.
|
|
|
+Хотя таблица, представленная выше, значительно облегчит назначение командлетов, не стоит ожидать от командлетов поведения как в *nix-системах. Так, например, в PowerShell командлет Get-Content создан для вывода содержимого одного файла на экран, в то время как на *nix-системах утилита cat изначально использовалась для конкатенации (процесса соединения) нескольких файлов с последующим выводом на экран.
|
|
|
+Очевидно, что возможности PowerShell значительно больше, чем CMD.exe. Опытный администратор знает, что некоторые задачи из таблицы можно решить в CMD.exe, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.
|
|
|
+
|
|
|
+
|
|
|
+# Конвейер PowerShell: особенности и параметры
|
|
|
+
|
|
|
+По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.
|
|
|
+Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.
|
|
|
+После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.
|
|
|
+
|
|
|
+
|
|
|
+Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.
|
|
|
+
|
|
|
+
|
|
|
+# Интегрированная среда разработки
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.
|
|
|
+PowerShell-скрипты — это текстовые файлы с расширением .ps1.
|
|
|
+Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:
|
|
|
+редактор PowerShell-скриптов с автодополнением,
|
|
|
+окно для интерактивного выполнения командлетов в скрипте,
|
|
|
+список доступных командлетов с поиском.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.
|
|
|
+После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.
|
|
|
+Непосредственное преимущество, получаемое пользователем при работе с PowerShell ISE, проистекает из общих возможностей этого продукта как оболочки. Вы получаете доступ ко многим комбинациям «горячих» клавиш и другим средствам, стандартным для графических приложений. Так, нажав комбинацию клавиш Ctrl+A, вы сможете выделить все содержимое окна, с помощью комбинации Ctrl+C — скопировать выделенный фрагмент, нажав клавиши Ctrl+X — вырезать его, а посредством комбинации клавиш Ctrl+V — вставить этот фрагмент в нужное место. Конечно, упомянутые функции не относятся к разряду новаторских технологий, но они раз за разом дают пользователю возможность экономить время и силы.
|
|
|
+Еще важнее доступность этого графического приложения. И хотя пользователи, привыкшие работать с подобными программами, вполне могут оставить упомянутые достоинства без внимания, отметим, что PowerShell ISE обеспечивает:
|
|
|
+наглядность — пользователь может видеть многие процессы обработки на панели инструментов;
|
|
|
+подсказки — графические изображения на значках, а также ярлыки, используемые для оформления меню, указывают на назначение соответствующих элементов;
|
|
|
+компактность — процесс активации элементов занимает всего лишь несколько миллисекунд.
|
|
|
+
|
|
|
+# Заключение
|
|
|
+
|
|
|
+PowerShell представляет собой эволюционный скачок в области системного администрирования и автоматизации, кардинально меняющий подход к управлению ИТ-инфраструктурой. Рассмотренные в лекции аспекты демонстрируют, что это не просто очередная командная оболочка, а целостная экосистема для эффективного управления сложными системами.
|
|
|
+Объектно-ориентированная парадигма является фундаментальным отличием PowerShell от традиционных оболочек. Работа с объектами .NET вместо текстовых потоков устраняет необходимость сложного парсинга и делает скрипты более надежными и читаемыми. Это позволяет администраторам оперировать сложными структурами данных напрямую, что значительно повышает эффективность работы.
|
|
|
+Единая система именования командлетов по схеме "Глагол-Существительное" создает интуитивно понятный интерфейс, снижая порог входа для новичков и повышая продуктивность опытных специалистов. Консистентность именования делает код самодокументируемым и легко читаемым. Мощная конвейерная обработка обеспечивает композиционность простых команд в сложные сценарии обработки данных. Особенность передачи объектов по конвейеру "на лету" оптимизирует использование памяти и позволяет обрабатывать большие объемы данных без промежуточного хранения. Наличие интегрированной среды разработки PowerShell ISE значительно упрощает процесс создания и отладки скриптов. Автодополнение, графический интерфейс для работы с параметрами командлетов и встроенная справка делают среду доступной как для начинающих, так и для опытных разработчиков.
|
|
|
+Освоение PowerShell — это не просто изучение еще одного инструмента, а инвестиция в развитие профессиональных навыков, которые останутся востребованными в обозримом будущем. Мощь, гибкость и универсальность делают PowerShell незаменимым инструментом в арсенале современного ИТ-специалиста, позволяя решать сложные задачи управления инфраструктурой эффективно и элегантно.
|
|
|
+
|
|
|
+# Источники
|
|
|
+https://selectel.ru/blog/basics-windows-powershell/
|
|
|
+https://skillbox.ru/media/code/powershell-dlya-chaynikov-chto-eto-i-kak-s-nim-rabotat/
|