МЕНЮ

Скрипты PowerShell с нуля. Уроки для начинающихСовременная операционная система Windows, под которой вы вероятней всего работаете в данный момент, является прямым потомком таких динозавров, как DOS и MS-DOS. Однако PowerShell, как командная оболочка от Мелкомягких, появилась сравнительно недавно. А именно в 2006 году. До этого, говоря о командной оболочке в Винде, подразумевали знакомую всем CMD. Которая на поверку является лишь эмуляторкой командной строки, эмулирующая всё что было в DOSе и представляющее собой дырявейшее ведро с гвоздями по сравнению с UNIX’овским BASH’ем. На Юнихсе пишутся SHELL-скрипты, а в Винде БАТ. И соответственно синтаксис в этих батниках отличается. И он весь такой топорный и не логичный, аж зубы сводит. Короче видимо в нулевых, кого-то из программистов Билла эта катавасия окончательно выбесила и было решено написать отдельный язык программирования для любителей окон под названием PowerShell.

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

Zip File, мамкины хаЦкеры. С вами Денчик и сегодня мы подробно рассмотрим вопрос применения PowerShell в операционных системах семейства Windows. Познакомимся с расширениями, узнаем, что из себя представляет Execution Policy. 

Ну и традиционно поговорим про переменные, условные операторы, циклы и прочие прелести присущие командным оболочкам без графики. Если вам интересна данная тема и вы хотите научиться писать скрипты на pShell. 

Тогда не теряйте времени даром. Устраивайтесь по удобней и приготовьте к погружению в максимально понятный ликбез по теме скриптописания на Винде. 

Ни грамма лишней воды. Только суровая база и реальная практика с отработкой для закрепления полученных знаний ждёт вас в заключительной части видоса. Погнали. 

Сам PowerShell вы можете легко найти в «ПУСКе». Выглядит он как типичное окно терминала, только синего цвета. Что как бы тонко намекает на склонность к синьке среднестатистических пользователей данной ОС.

Тут же мы видим рекламу гласящую, что PowerShell это кроссплатформенная история, а значит она есть даже под Linux. Не понятно зачем, но есть. Помимо стандартного Shell’а в вашей системе есть ISE.

Она же интегрированная среда для написания скриптов. Данная среда значительно упрощает это самое написание. Также настоятельно рекомендую запускать командную оболочку от имени Администратора. Это связано с особенностью политик.

Execution Policy PowerShell

По умолчанию PowerShell не позволяет вам запускать отдельные скрипты или какие-то командлеты. Командлеты это упрощённые команды шела. Так вот, несмотря на дефолтный запрет, данную политику можно изменить, используя несколько способов.

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

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

Иными словами, Мелкомягкие страхуются, снимая с себя ответственность. Мол, если ты выключил политики безопасности – то пеняй на себя. Грамотная политика, тут, как говорится, не докопаться.

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

В данном случае Set – выставить. Есть ещё Add – добавить. Get – получить. Test – проверить. Ну и т.д. Суть думаю ясна. После глагола идёт дефис и обозначается, что мы собираемся выставить, добавить или же получить.

Ну а далее уже следуют параметры для этой истории. Т.е. в нашем случае – выставить политику исполнения bypass для вот этого вот процесса. Как по мне, синтаксис даже логичней, чем в Баше. 

Переменные в PowerShell

Перейдём к рассмотрению переменных в PowerShell’е. Помните, как в Баше, о котором мы разговаривали в прошлом уроке, весь код представлял собой текстовую инфу. 

Так вот. В PowerShell всё с точностью наоборот. Т.к. это не просто командная строка, а реально полноценный язык программирования, причём на поверку объектно-ориентированного типа.

Т.е. работающий с концепцией «Классы – объект». Это когда вы всё что вокруг себя в мире воспринимаете, можно разделить на классы и категории. Например, класс животные. В нём есть подклассы собак, кошек, юзверей.

У юзверей есть ещё подклассы, бухгалтеры, менеджеры и т.д. Ну а объект – это представитель определённого класса. Т.е. вы, смотрящие этот видосик, являетесь представителями класса пользователей платформы ютуб.

У объекта всегда есть какое-то свойство. Например, у вас принадлежность к определённой расе и нации, место проживания, способ зарабатывания денег и прочие интересные вещи.

Помимо свойств каждый объект имеет определённые методы. Т.е. функционал объекта. Например, складировать арбузы в коробку в Пятёрочке или умение писать скрипты на языке PowerShell.

Такая вот бобуйня. Баш нервно курит в сторонке глядя на такую махину. Тут вам не просто строка из текста, а целый объект, который можно передать в переменную.

Плюс ко всему, PowerShell не восприимчив к пробелам. Вот самый простой примерчик с блокнотом. Можно добавить к объекту командлет Get-Member и посмотреть все параметры, которые можно к нему применить.

Также, для заядлых любителей Баша Мелкомягкие встроили в PowerShell алиасы. Т.е., по сути, ярлыки с башевскими командами, которые активируют Шеловские. 

Например, знакомый по башке Man включает здесь Get Help, а ls – виндовый GetChildItem. Общем, всё для того, чтобы очкастым пацанчикам было удобно и интуитивно понятно.

Операции в PowerShell

Над переменными и значениями можно выполнять различные операции. Аримфетику, логические операции. Само собой присваивание в переменной. И т.д. 

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

Синтаксис необходимый для работы с операциями объяснять подробно в данном видео я не буду, ибо он аналогичен истории с Башем. Если не смотрели, то видео, то обязательно ознакомьтесь.

В повседневной работе пригождается, как правило только арифметика, логика и присваивание. Как и в случае с башем у нас есть так называемые ПайпЛайны, они же трубы. Только в Башке всё построено на строках.

Т.е. там команды возвращают строки, которые могут быть переданы через конвейер в другие команды. А в PowerShell функции возвращают объекты.

Так, к примеру функция Write-Host имеющая более привычный для всех алиас Echo разрывает цепочку событий.

Если вы запускаете скрипт, то понятно, что у него есть какой-то параметр. В случае со скриптами написанными на PowerShell, которые, к слову, имеют расширение *ps1, эти параметры существуют в виде специального списка args.

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

Соответственно параметр Count выдаст вам количество аргументов всего.

Условный оператор PowerShell

Согласитесь, что было бы не так весело и интересно, если бы в PowerShell не было условного оператора. Синтаксис у этого дела здесь значительно проще, чем в Баше. За что Мелкомягким отдельный респект. 

Вы пишите ключевое слово if, в условиях любое булевое сравнение, и соответственно всё что потом в скобках будет исполнено, если условие выполнено. 

Соответственно если у вас есть часть Else, то будет выполняться, то что идёт после неё. В случае, когда необходимо проверить несколько условий, используется ключевое слово elseif.

В PowerShell есть даже специальные командлеты, которые позволяют проверить дополнительные условия. В частности, Test-Path, проверяющий наличие пути. 

Например, можно задать конструкцию, где если такой-то путь существует – мы что-то делаем. С помощью ключей к данному командлету, можно проверить время создания, новее файл или старее, тип пути, наличие внутри данных и т.д.

Циклы PowerShell

Циклы в pShell, как и в баше позволяют выполнять одни и те же действия над разными элементами. В баше соответственно циклы проводились либо над элементами строчки, либо над набором строк.

В PowerShell’е всё почти также, только чутка по-другому. К примеру, есть цикл ForEach и в нём цикл для переменной задаётся в объекте списка. Т.е. вы передаёте список элементам и над ними уже что-то делаете.

Также есть цикл While, т.е. отрабатывать до тех пор, пока условие выполняется. И цикл Do While в котором условие проверяется в конце. В качестве примера вот вам простенький цикл. 

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

Окей, давайте рассмотрим ещё примерчики. Если мы пихаем в переменную Проц Гет процесс, без каких-то аргументов, то мы получаем список всех процессов.

Если мы проходим по этому списку, то мы можем от каждого элемента, т.е. от каждого процесса-объекта что-то получить. Например, его имя.

Ещё один способ создать список чисел – это использовать конструкцию из двух точек между ними. В примере, в переменную Nodes присваивается список от 1 до 10, а потом для каждого элемента списка прогоняется какая-либо команда. 

Вот ещё одна вариация. В ней вы генерите дополнительные имена. Как и в прошлом примере делается список Nodes, задаётся переменная равная двум, и до тех пор, пока значение переменной N меньше либо равно количеству элементов в этом списке, мы печатаем строчку файл плюс номер N. А сам N увеличиваем на два.

Если вы захотите создать бесконечный цикл, то в PowerShell для этого достаточно просто создать цикл от специальной переменной под названием True (истина).

Для выхода из циклов тут, как и в Баше, используется Брейк. Тут всё понятно. Если при исполнении вашего цикла PowerShell натыкается на слово Континью, то вместо продолжения тела цикла, происходи возврат назад для выполнения следующей итерации.

Эту историю можно использовать в ситуации, когда мы хотим прошерстить все файлы на диске и вывести имена для всех директорий, а для файлов пропустить.

Для этого потребуется написать соответствующее условие, мол если директория, то сделать то-то. А если файл, то не трогать. Если вы уже поднаторели в написании циклов на Баше, то с PowerShell’ом проблем у вас не возникнет.

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

Познакомились с условным оператором, циклами. Разобрали базовые командлеты. Узнали про специальную PowerShell’овскую интегрированную среду для написания скриптов.

И вообще, я считаю, отлично провели время. Надеюсь, вы поняли, что главным преимуществом PowerShell’а над любой командной строкой является прямая работа с ОС Windows. 

Т.е. все эти командлеты – это не просто скрипты, а сущности операционной системы. С их помощью можно менять практически все настройки вышеупомянутой ОСьки.

В Unix-системах Баш, конечно, тоже позволяет делать подобные правки, но делать всё это через текст, поверьте в разы труднее. В этом плане продукт мелкомягких затыкает Линуху за пояс. Хотя и говорить это немножко больно.

А вот о чём, мне говорить не только не больно, а даже хочется, так это о моём авторском курсе, ориентированном на начинающих программистов и людей, занимающихся разработкой, с чётким названием «GIT-это просто!»

Для его создания с нанял стороннего специалиста по данной теме и в тандеме у нас получилось сделать не просто качественный и весёлый, а суперполезный продукт, изучив который вы приобретёте в копилку скилл востребованный в любой IT-ветке. 

Если ты начинающий или более-менее опытный разработчик, сисадмин помешанный на автоматизации или безопасник занимающийся скриптами – эта темка тебе точно зайдёт.

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

Ссылку на практический курс «GIT – Это просто!» и на другие авторские материалы от Денчика ищи в описании. Поддержки проект не только словом. И я непременно отблагодарю тебя новой порцией полезнейших знаний по полной программе. 

Ну а на сим нынче всё. Если понравилось видео, то не забудьте влепить под ним лайк и написать комментарий, насколько вы шарите в PowerShell’е лучше меня. 

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

Так что пользуйтесь мнимой иллюзией свободы, пока это вообще возможно. Прокачивайте полезные навыки. Изучайте современные инструменты для автоматизации окружающего пространства. И будем вам счастье. 

Помните, технологии – это весело. Во всяком случае информационные сто пудово. За другие ручаться не буду. Ладненько, с вами, как обычно, был Денчик. До новых встреч, мои кайфные друже. Всем пока.

Не можешь понять, куда делись видео по взломам и хакингу? Они переехали в наш уютный паблик в телеге

telegram chanel

Хочешь больше контента? Подписывайся на YouTube-канал!

Курс «Диплом за неделю»

Пособие «Библия вардрайвинга»

Курс Cisco «CCNA: Introduction to Networks»

© 2024. IT-спец. Денис Курец.