Просмотр исходного кода

Merge branch 'master' of u23-27moroz/EASvZI into master

ypv 4 дней назад
Родитель
Сommit
295d83ae53

BIN
Лекции/2.2.50_PowerShell/1.png


+ 123 - 0
Лекции/2.2.50_PowerShell/2.2.50_PowerShell_Morroz.md

@@ -0,0 +1,123 @@
+# PowerShell
+
+PowerShell — это кроссплатформенная оболочка командной строки и язык сценариев, созданная Microsoft, в первую очередь для задач автоматизации и конфигурации. Это не просто замена cmd.exe, это мощная среда, построенная на .NET.
+Оболочка: Интерактивная среда, где вы вводите команды и немедленно получаете результат.
+Язык сценариев: Позволяет писать сложные скрипты (.ps1 файлы) для автоматизации многократных задач.
+Платформа: Предоставляет богатый набор встроенных команд и позволяет управлять практически всеми аспектами ОС Windows, облачных сервисов (Azure, AWS), VMware, Docker и многого другого.
+![](1.png)
+
+# Эволюция
+
+PowerShell Core (начиная с версии 6.0) стал кардинальным пересмотром архитектуры PowerShell. Основные изменения включали:
+Переход на .NET Core — отказ от .NET Framework открыл путь к кроссплатформенной разработке.
+Открытый исходный код — весь проект PowerShell Core размещён на GitHub, что 
+способствует активному участию сообщества.
+Совместимость с Linux и macOS — появление возможности писать универсальные скрипты для различных операционных систем.
+В версии PowerShell 7 (также известной как PowerShell Core 7) был сделан акцент на повышенную совместимость с модулями Windows PowerShell, что стало важным шагом в сторону объединения усилий и устранения фрагментации.
+![](2.png)
+
+# Философия и Основные Концепции
+
+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, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.
+![](3.png)
+
+# Конвейер PowerShell: особенности и параметры
+
+По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.
+Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.
+После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.
+![](4.png)
+
+Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.
+![](5.png)
+
+# Интегрированная среда разработки
+
+![](6.png)
+
+Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.
+PowerShell-скрипты — это текстовые файлы с расширением .ps1.
+Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:
+редактор PowerShell-скриптов с автодополнением,
+окно для интерактивного выполнения командлетов в скрипте,
+список доступных командлетов с поиском.
+![](7.png)
+
+
+Обратите внимание, что модуль 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/

BIN
Лекции/2.2.50_PowerShell/2.png


BIN
Лекции/2.2.50_PowerShell/3.png


BIN
Лекции/2.2.50_PowerShell/4.png


BIN
Лекции/2.2.50_PowerShell/5.png


BIN
Лекции/2.2.50_PowerShell/6.png


BIN
Лекции/2.2.50_PowerShell/7.png


+ 22 - 0
Лекции/2.2.50_PowerShell/Вопросы_Morroz.md

@@ -0,0 +1,22 @@
+Чем принципиально отличается работа с данными в PowerShell по сравнению с традиционными оболочками типа bash или CMD.EXE?
+Основное отличие заключается в том, что PowerShell работает с объектами, а не с текстом. В традиционных оболочках команды возвращают текстовый вывод, который требует дополнительного парсинга для обработки. В PowerShell каждая команда возвращает объекты .NET с свойствами и методами, что позволяет напрямую обращаться к данным без сложного текстового анализа.
+
+Какие три ключевых изменения позволили PowerShell стать кроссплатформенным решением?
+Переход на .NET Core - отказ от .NET Framework открыл путь к кроссплатформенной разработке.
+Открытый исходный код - весь проект размещён на GitHub, что способствует участию сообщества.
+Совместимость с Linux и macOS - возможность писать универсальные скрипты для различных ОС.
+
+В чем особенность передачи данных через конвейер в PowerShell?
+Конвейер в PowerShell передает объекты по одному, а не целиком. Это оптимизирует использование памяти и позволяет обрабатывать данные "на лету".
+
+Каким командлетом можно определить все свойства объекта и как его использовать?
+Для получения полной информации об объекте используется командлет Get-Member.
+
+Какие три основных компонента включает Windows PowerShell ISE?
+Редактор PowerShell-скриптов с автодополнением
+Окно для интерактивного выполнения командлетов в скрипте
+Список доступных командлетов с поиском
+
+Почему файлы PowerShell имеют расширение .ps1 и какие меры безопасности предусмотрены?
+Расширение .ps1 указывает на то, что это скрипт PowerShell первой версии (хотя поддерживаются и более новые версии)
+Нельзя запускать двойным кликом - требуется использовать контекстное меню "Запустить с помощью PowerShell"