Windows powershell что это за программа и нужна ли она
Интегрированная среда сценариев Windows PowerShell
Интегрированная среда сценариев Windows PowerShell (ISE) является ведущим приложением для Windows PowerShell. В ISE можно запускать команды, записывать и тестировать скрипты, а также выполнять их отладку в едином графическом пользовательском интерфейсе на базе Windows. ISE поддерживает редактирование нескольких строк, заполнение нажатием клавиши TAB, раскраску синтаксических конструкций, выборочное выполнение, контекстную справку и поддержку письма справа налево. Элементы меню и сочетания клавиш подходят для выполнения большинства тех же задач, которые выполняются в консоли Windows PowerShell. Например, при отладке скрипта в ISE вы можете щелкнуть строку кода на панели редактирования правой кнопкой мыши, чтобы задать точку останова.
Поддержка
ISE была впервые представлена в Windows PowerShell версии 2 и переработана в PowerShell версии 3. ISE поддерживается во всех поддерживаемых версиях Windows PowerShell до версии 5.1 включительно.
Функции для ISE PowerShell больше не разрабатываются. Как компонент доставки Windows эта среда по-прежнему официально поддерживается для внесения наиболее важных исправлений, связанных с безопасностью и обслуживанием. Пока что мы не планируем удалять ISE из Windows.
ISE не поддерживается в PowerShell версии 6 и более поздних версиях. Пользователям, которые ищут замену ISE, следует использовать Visual Studio Code с расширением PowerShell.
Основные возможности
Основные возможности в Windows PowerShell ISE являются такими:
Интегрированная среда сценариев Windows PowerShell позволяет настроить некоторые аспекты его представления. Она также имеет свой собственный скрипт профиля Windows PowerShell.
Запуск интегрированной среды сценариев Windows PowerShell
Нажмите кнопку Пуск, выберите раздел Windows PowerShell, а затем щелкните Интегрированная среда скриптов Windows PowerShell. Кроме того, можно ввести powershell_ise.exe в любой командной оболочке или поле «Выполнить».
Получение справки в интегрированной среде сценариев Windows PowerShell
Для чего нужен Windows PowerShell – как его использовать
Чтобы понять, что такое Windows PowerShell, мы должны сначала объяснить, что такое оболочка. Оболочка или интерпретатор команд – это программа, которая позволяет взаимодействовать с операционной системой через терминал и в командной строке. Используя оболочку можно давать команды системе и открывать программы.
Windows PowerShell – это усовершенствованная оболочка, интегрированная во все операционные системы Microsoft, начиная с Windows 7. Она включает в себя интерактивные подсказки и среду сценариев, которую можно использовать по отдельности или в комбинации.
Что такое Windows PowerShell
Как следует из названия, Windows PowerShell – это оболочка командной строки. Она была разработана специально для использования системными администраторами и может использоваться для выполнения всех команд cmd.exe.
PowerShell позволяет вам взаимодействовать с операционной системой, используя преимущества инструментов, доступных из командной строки, и используя возможности программирования сценариев для автоматизации рутинной работы.
Давайте подробно рассмотрим, какие функции и преимущества предлагает эта оболочка от Microsoft:
Как запустить Windows PowerShell
После объяснения, что такое Windows PowerShell, давайте посмотрим, как его запустить.
Более современный способ – доступный в Windows 10 – щелкнуть правой кнопкой мыши по меню «Пуск» и выбрать соответствующий пункт из меню «Опытного пользователя»
Как взаимодействовать с Windows PowerShell
Все команды, доступные в командной строке Windows, доступны и могут также использоваться в PowerShell.
Мы можем использовать символы переправления > для отправки вывода в файл или >> для добавления в файл. PowerShell использует псевдонимы для связи команд cmd.exe со своими командлетами. Например, команда cd является псевдонимом для командлета set-location, точно так же, как dir является псевдонимом для командлета get-children.
PowerShell можно использовать для запуска исполняемых команд или для работы непосредственно с реестром Windows без запуска его редактора.
Одна из сильных сторон этой оболочки – её командлеты. Каждый командлет представлен «глаголом», за которым следует тире и существительное.
Чтобы просмотреть полный список всех доступных командлетов, введите get-command. Чтобы получить информацию о конкретном командлете, введите get-help и имя командлета.
Что такое Windows PowerShell ISE
Windows PowerShell ISE (интегрированная среда сценариев) – это приложение, появившееся в PowerShell 2.0. Она позволяет запускать команды и писать, тестировать и отлаживать сценарии в едином графическом интерфейсе пользователя на базе Windows.
Этот ISE включает командную панель, одну для сценариев и одну для вывода. Панель вывода отображает результаты команд, запущенных в двух других панелях. Кроме того, графическое окружение можно изменить, выбрав расположение блоков.
PowerShell ISE поддерживает многострочное редактирование, окрашивание синтаксиса, завершение с помощью клавиши TAB и выборочное выполнение и использует собственный профиль, отличный от того, который используется для настройки PowerShell.
Что такое Windows PowerShell и с чем его едят? Часть 2: введение в язык программирования
Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.
Для PowerShell можно писать сценарии на интерпретируемом мультипарадигменном языке, в котором есть элементы классического процедурного, объектно-ориентированного и даже функционального программирования: условный переход, циклы, переменные, массивы, хэш-таблицы, классы, обработка ошибок, а также функции, командлеты и конвейеры. Предыдущая статья была посвящена основам работы в среде, а сейчас мы предлагаем вниманию читателей небольшой справочник для программистов.
Оглавление:
Писать код можно в любом текстовом редакторе или с использованием интегрированной среды разработки — проще всего взять Windows PowerShell ISE из комплекта поставки серверных операционных систем Microsoft. Нужно это только для достаточно сложных скриптов: короткие наборы команд проще выполнять в интерактивном режиме.
Комментарии
Использование комментариев считается частью хорошего стиля программирования наряду с правильными отступами и пробелами:
Переменные и их типы
Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):
Объявить переменную можно с указанием ее типа в квадратных скобках (оператор приведения типов) перед именем или значением:
PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():
Существует некоторое количество командлетов для управления переменными. Их список в удобной форме выводится с помощью команды:
Для просмотра объявленных переменных и их значений можно использовать специальный командлет:
Такой способ кажется чрезмерно громоздким, с переменными намного удобнее работать через операторы или обращаясь к их свойствам и методам напрямую. Тем не менее командлеты имеют право на существование, поскольку позволяют задать некоторые дополнительные параметры. Важно понимать, что пользовательские переменные определены только в рамках текущего сеанса. После закрытия консоли или завершения сценария они удаляются.
Системные переменные
Вдобавок к операторам и командлетам для обращения к объявленным переменным существует псевдонакопитель Variable:. Работать с ним можно по аналогии с другими накопителями, а переменные в этом случае напоминают объекты файловой системы:
Области видимости
Переменные окружения (среды)
Из PowerShell доступен еще один псевдонакопитель Env:, с помощью которого можно обратиться к переменным среды. При запуске оболочки они копируются из родительского процесса (т.е. из инициировавшей текущий сеанс программы) и обычно их первоначальные значения совпадают со значениями в панели управления. Для просмотра переменных окружения используется командлет Get-ChildItem или его псевдонимы (алиасы): ls и dir.
Эти переменные представляют собой последовательности байтов (или символов, если угодно), интерпретация которых зависит только от использующей их программы. Командлеты *-Variable с переменными среды не работают. Чтобы обратиться к ним, придется использовать префикс диска:
Арифметические операторы и операторы сравнения
Операторы присваивания
Логические операторы
Условный переход
Операторы ветвления в PowerShell стандартные: IF(IF…ELSE, IF…ELSEIF…ELSE) и SWITCH. Рассмотрим их использование на примерах:
Циклы
В языке PowerShell есть несколько разновидностей циклов: WHILE, DO WHILE, DO UNTIL, FOR и FOREACH.
Цикл с предусловием работает, если/пока оно выполняется:
Циклы с постусловием отработают хотя бы один раз, потому что проверка условия производится после выполнения итерации. При этом DO WHILE работает, пока условие истинно, а DO UNTIL — пока оно ложно:
Количество итераций цикла FOR известно заранее:
В цикле FOREACH осуществляет перебор элементов массива или коллекции (хэш-таблицы):
Массивы
В переменных PowerShell хранятся не только единичные объекты (число, строка и т.д.), но и множественные. Самая простая разновидность таких переменных — массивы. Массив может состоять из нескольких элементов, из одного элемента или быть пустым, т.е. не содержать элементов. Для его объявления используется оператор @(), который понадобится нам в следующей статье — он очень важен для добавления в массив других массивов (создания многомерных массивов), передачи массивов в функции в качестве аргумента и тому подобных задач:
В большинстве случаев оператор @() можно опустить:
В этом случае массив из одного элемента инициализируется следующим образом
Для обращения к элементам массива используется начинающийся с нуля целочисленный индекс и оператор индекса (квадратные скобки):
Можно указать несколько индексов через запятую, в т.ч. повторяющихся:
Обратите внимание, что значения целочисленного массива могут быть больше максимального значения индекса массива с данными. В этом случае возвращаются все значения до последнего:
В PowerShell массивы могут содержать элементы разных типов или быть строго типизированными:
Пример создания строго типизированного массива:
Хэш-таблицы
Еще один базовый тип переменных в языке PowerShell — хэш-таблицы, которые также называют ассоциативными массивами. Hashtable похожи на JSON object и строятся по принципу ключ-значение. В отличие от обычных массивов, доступ к их элементам осуществляется по именованным ключам, которые являются свойствами объекта (также можно использовать оператор индекса — квадратные скобки).
Пустая хэш-таблица объявляется с помощью служебного символа @ и операторных скобок:
При объявлении можно сразу создать ключи и присвоить им значения:
Для добавления элемента в хэш-таблицу нужно присвоить ей еще несуществующий ключ или воспользоваться методом Add(). Если присваивание делается с существующим ключом, его значение изменится. Для удаления элемента из хэш-таблицы используется метод Remove().
Переменные этого типа можно передавать в качестве аргументов функциям и командлетам — в следующей статье мы изучим как это делается, а также рассмотрим еще один сходный тип — PSCustomObject.
Функции
В языке PowerShell есть все необходимые для процедурного программирования элементы, включая функции. Для их описания используется служебное слово Function, после которого требуется указать имя функции и заключенное в операторные скобки тело. При необходимости передать в функцию аргументы их можно указать сразу после имени в круглых скобках.
Для примера создадим функцию возведения числа в квадрат:
Отметим, что в теле функции можно использовать любые объявленные до ее вызова переменные, а вызов функций в PowerShell может показаться непривычным: аргументы (если они есть) не заключаются в круглые скобки и разделяются пробелами.
Из-за способа передачи аргументов саму функцию иногда приходится заключать в скобки:
При описании функции можно присвоить аргументам значения по умолчанию:
Существует и другой синтаксис для описания аргументов функции, кроме того параметры могут считываться из конвейера — все это пригодится в следующей статье, когда мы будем рассматривать экспортируемые модули и создание собственных командлетов.
Обработка ошибок
В PowerShell существует механизм Try…Catch…Finally, позволяющий обрабатывать исключительные ситуации. В блок Try помещается код, в котором может возникнуть ошибка, а в блок Catch — ее обработчик. Если ошибки не было, он не выполняется. Блок Finally выполняется после блока Try вне зависимости от возникновения ошибки, а блоков Catch может быть несколько для исключений различных типов. Само исключение записывается в не требующую объявления переменную по умолчанию ($_) и может быть легко извлечено. В примере ниже мы реализуем защиту от ввода некорректного значения:
На этом рассмотрение основ программирования на языке PowerShell стоит закончить. В следующих статьях мы подробнее изучим работу с переменными разных типов, коллекции, регулярные выражения, создание функций, модулей и собственных командлетов, а также объектно-ориентированное программирование.
PowerShell — это язык программирования?
Является ли PowerShell языком программирования? Совершенно определённо — является. И не обращайте внимание на тех, кто говорит, что это не так. Многие, работающие в сфере программирования, могут просто посмеяться над мыслью о том, что код, написанный для PowerShell — это нечто большее, чем обычные скрипты. Такие люди категорически неправы. Здесь мы поговорим о том, почему это так. Но если вы читаете этот текст в поиске чёткого ответа, то знайте — PowerShell — это язык программирования. Более того, PowerShell — это поразительный инструмент, который позволяет решать практически любые задачи. С помощью PowerShell можно сделать что-то простое, такое, что обычно делают в командной строке Windows (CMD), а можно, используя Windows Forms, построить полномасштабное приложение. Границы того, что можно создать с помощью PowerShell, ограничены лишь фантазией разработчика и его навыками поиска в интернете.
Здесь мы пройдёмся по некоторым вопросам о PowerShell, которые возникают у людей чаще всего. Особое внимание мы уделим вопросу о том, можно ли считать PowerShell языком программирования. Я работал с PowerShell много лет, но не могу сказать, что освоил хотя бы малую часть возможностей этой системы. Поэтому я, приступая к работе над этим материалом, уверен в том, что и я, и тот, кто будет этот материал читать, узнаем много нового об этом фантастическом инструменте. Ну и, конечно, я надеюсь, что мне удастся чётко ответить на вопрос о том, является ли PowerShell языком программирования.
Зачем вообще учиться программировать?
Я полагаю, что в заголовок этого раздела вынесен хороший вопрос. Зачем учиться программировать? Ведь это очень сложно, а полученные знания и навыки, вероятно, не пригодятся IT-специалисту в обычной работе. Тот, кто думает, что так оно и есть, глубоко ошибается. В наши дни научиться программировать как никогда просто, при этом конкретная сфера деятельности того, кто учится программировать, особой роли не играет.
Благодаря поисковику Google и видеохостингу YouTube (это, соответственно, первый и второй по посещаемости сайты в мире) в нашем распоряжении имеются нескончаемые запасы бесплатных и хорошо подготовленных учебных материалов. Если тому, кто хочет изучить некий язык программирования, попадётся хороший курс, то он меньше чем за час (в буквальном смысле) сможет настроить среду разработки и написать свой первый «Hello World». На следующем рисунке можно видеть «Hello World» на PowerShell.
«Hello World» на PowerShell — это очень просто
Может, изучая программирование, вы подумываете о продвижении по карьерной лестнице и считаете, что знания из сферы DevOps — это как раз то, что вам нужно. Ведущие языки программирования для DevOps — это Golang, Python, Ruby, C#… Данный список можно продолжать и продолжать (и в этот список, пожалуй, можно включить практически все актуальные языки программирования).
Есть масса причин для того чтобы учиться тому, как писать программы. Может, кому-то всегда хотелось сделать веб-приложение для организации, где он работает. А может — кто-то мечтает написать успешную мобильную игру, которая обеспечит его на всю оставшуюся жизнь. Возможно, что кому-то просто хотелось бы автоматизировать свои рутинные задачи и высвободить время, которое он, быстрее справляясь со своими обязанностями, сможет потратить на просмотр видео с котами. Умение программировать делает всё это возможным.
Что такое язык программирования?
Прежде чем называть PowerShell «языком программирования» или «средой для разработки скриптов», нам, вероятно, надо сначала разобраться с тем, что такое «язык программирования». Если говорить простыми словами, то язык программирования — это последовательность наборов инструкций, которые взаимодействуют с компьютерной системой.
Эти инструкции можно воспринимать как способ объяснения компьютеру того, чего от него хочет человек. При этом — такой способ, который не требует от человека изучения ассемблера или низкоуровневого программирования в машинных кодах с использованием шестнадцатеричных и двоичных конструкций (правда, кое-кто свободно владеет подобными методами «общения» с компьютерами; мы выражаем таким людям своё почтение!).
Существуют разные виды языков программирования. Кратко опишем их:
Суть PowerShell
Проект PowerShell, с момента его появления, почти 20 лет стремительно развивался. То, что проект этот достиг уровня зрелости, очевидно для всех, кто им пользуется, и кто полагается на него в решении своих ежедневных задач, вне зависимости от того, что именно это за задачи. Существует обширный набор так называемых «командлетов», которые поддерживаются их создателями в актуальном состоянии и дают тому, кому это нужно, постоянно пополняемый набор гибких и мощных инструментов.
И всё же, PowerShell — это язык программирования или нет?
Можно ли отнести PowerShell к какому-то из вышеописанных видов языков программирования? Возможно, вы уже пришли к выводу о том, что PowerShell, на самом деле, подпадает под несколько категорий языков программирования. Пуристы отвергнут идею о том, что PowerShell — это полноправный язык программирования, и я даже вижу причину такого видения ситуации.
PowerShell полагается на системные хуки ОС Windows для выполнения множества встроенных команд, или, как их называют в PowerShell-сообществе, «командлетов» (так что этот термин придумал не я). Каждый из командлетов способен выполнить некую очень полезную, или, в некоторых случаях, очень мощную операцию.
Если говорить серьёзнее, то PowerShell может оказать компьютерщику огромную помощь, и речь идёт не только о решении рабочих задач. Например, я хочу написать цикл материалов о том, как я создал простое Windows Form-приложение для моей мамы, которой уже за 70. Это приложение позволяет ей переключать настройки почтового сервера в путешествиях (до того, как мир охватило то, что происходит сейчас) буквально несколькими щелчками мыши.
Я надеюсь, что этот небольшой проект вдохновит на создание чего-то похожего тех, кто никогда ничего такого делать не пытался, и что процесс создания своего проекта принесёт им много положительных эмоций. Поэтому, если вам это интересно, можете иногда заглядывать в список моих публикаций. А вот — материал о том, как узнать версию PowerShell в Windows 10.
Полагаю, мы справились с нашей задачей. Мы выяснили, что PowerShell — это язык программирования, но вряд ли он будет основным языком, на котором пишет некий программист. Высоки шансы того, что тот, кто недавно узнал о PowerShell, воспользуется несколькими мощными скриптами для решения неких задач бэкенда своего приложения. Но реальность такова, что у скомпилированных приложений, запускающихся в операционной системе, есть преимущества в производительности перед хуками, используемыми в командной оболочке ОС Windows.
Итоги
Надеюсь, вы вынесли что-то полезное из этой нашей небольшой вылазки в мир языков программирования. Я не считаю себя экспертом ни в одной из тех областей, которых коснулся в этом материале. Я — энтузиаст, который хочет учиться новому. Я думаю, что главное, что можно вынести из чего-то вроде изучения программирования, скриптов, автоматизации, это желание осваивать новые навыки и развиваться.
Это — тот сорт любознательности, который, в итоге, поможет своему обладателю больше узнать о системах, с которыми он работает, поможет создать для этих систем что-то полезное, такое, что облегчит ему решение его повседневных задач. А если снова вернуться к вопросу о том, является ли PowerShell языком программирования, то я полагаю, что на этот вопрос совершенно спокойно можно ответить утвердительно.
Какие задачи вы решаете с помощью PowerShell?
Первые шаги для пауэршельшиков
Приди ко мне брате в Консоль!
— Админ Долгорукий.
Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему окошку, которое ребята из Майкрософт зачем-то вставили в свои новые продукты. Люди, которые сидят на блогах и знают программирование начали изучать это окошко.
В итоге к народу начало приходить осознание того, что Майкрософт действительно разработали что-то новое и интересное.
И так, зачем вам это нужно? В основном, программа под названием PowerShell (в дальнейшем PS) предназначена для администраторов и программистов. Она позволяет автоматизировать примерно 99% всех действий в системе. С помощью неё вы можете настраивать удалённые компьютеры, запускать и перезапускать сервисы и производить обслуживание большиства серверных приложений. Как выяснилось, возможности у программы потрясающие.
Конечно же, продвинутые пользователи найдут множество способов использования этого восхитительного синего окошка.
Задача этой статьи проста — показать вам малую долю возможностей PS и дать вам концептуальное понимание предмета. В действительности документации по предмету написано несметное количество, так что я не стремлюсь охватить всё. Я так же ознакомлю вас с набором утилит, которые позволят не вылезать из PS в принципе.
Что представляет собой PS? Это интерпретатор командной строки. Вы вводите необходимые команды, на экране отображается результат их выполнения. Всё просто. Всё было так со времён доса и старого доброго Юникса.
Есть два основных отличия от предшественников, которые качественно выделяют PS среди других интерпретаторов.
Приступая к работе
Если вы используете Windows 7 или 2008 то PS вам уже доступен. Для пользователей других версий Windows — добро пожаловать на сайт Майкрософт.
После установки вы можете запустить консоль и настроить её по своему вкусу, нажав на иконку в заголовке окна. Вы можете выбрать шрифт и изменить сам размер окна.
После этого, предпринимайте робкие шаги по выполнению первых команд. Для начала наберите
и вы получите список папок в текущем каталоге. Приятным моментом для любителей Юникса
будет тот факт, что команда
работает так же хорошо, как и dir. В PS существует система назначения алиасов на различные команды. В действительности, то что вы сейчас сделали — это выполнили командлет (так в PS называются команды, встроенные в сам PS) Get-ChildItem. Вы можете попробовать просто набрать Get-ChildItem и получить тот же результат, что и в двух предыдущих командах. Для того, чтобы вы быстро ознакомились со списком всех алиасов наберите
И так, что-то произошло. Вы начали кое-что понимать. Сейчас я буду раскладывать всю магию по кусочкам.
Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,
Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)
Далее, в PS достаточно много очевидных вещей находится в непривычных для виндузятника местах. В частности, вы можете посмотреть, что за диски есть в вашей системе, набрав команду
И в ответ вы получаете намного более интересный список дисков в вашей системе, нежели тот, что вы видите в «Моём Компьютере»
На диске Alias вы можете увидеть список всех алиясов в системе. Виртуальный диск Variable: хранит в себе все переменные, которые вы можете использовать в данной сессии. На диске Env — лежат переменные операционной системы. Диски HKCU и HKLM являются обёрткой для работы с соответствующими ветками реестра.
Давайте углубимся. Набирайте
Ну и как вам новый и невероятный способ хождения по реестру всея машины? Вы можете сделать ls по ветке реестра или перейти в нужный «каталог», набрав cd SYSTEM.
(Кстати, даже из под администраторского аккаунта есть доступ не ко всем объектам, о чём мой шелл меня уведомляет красными буквами).
Не бойтесь использовать команды New-Item и Remove-Item чтобы создавать и удалять нужные вам ключи в реестре. (И по традиции, я напомню вам, что играться с ключами реестра в администраторском режиме опасно)
Ну, вот вам и небольшой экскурс вглубь. Конечно же, у вас не получится создать ключ реестра так просто. Что-то пойдёт не так, как надо. Ну что же, могу сказать, что PS — это система, которая поощряет обучение в этой системе. Поэтому
Обучение тому, как правильно чему-то научиться в PowerShell
Способность наблюдать и анализировать наблюдения отличает нормального человека от психа. Ребят в Майкрософт психами не назовёшь. Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах. И той командой был великий и могучий man. (Для незнающих — попробуйте сделать — гугл man или наберите в своём баше man man)
В PS есть аналогичная команда, которая звучит как
Насколько поразительно отвратительно ребята из Майкрософт делают документацию для пользовательских приложений, настолько хорошо они заботятся о программистах. (Неверующие могут сравнить справку системы Windows XP и 2003)
И так, выбирайте приглянувшийся вам командлет и отправляйте его в help. Если после прочтения общей справки вы ничего не поняли, то попробуйте набрать
В ответ на эту команду вы получите список топиков, которые содержат ключевое слово:
В нашем случая, для того, чтобы научиться работать с реестром, вы можете просто набрать
В ответ вы получите длиннющее полотно, которое со всеми подробностями расскажет вам о том, как вы можете работать с реестром в PS.
К сожалению, читабельность полотна обратно пропорциональна его длине. Так что, научившись учиться, давайте обучимся тому, как сделать работу в шелле немного проще.
Товарищ, смирись, ты — в командной строке. Тут безгуёво принципе. Но, если ты познаешь некоторые уловки, тебе здесь станет удобно.
И так, для тех, кто никогда не был в командной строке
Для тех, кто уже бывал в командных строках
Углубляемся в изучение окружения
Для того чтобы понять нижеследующие строки, нам надо будет разобраться с понятием конвейера.
Когда вы запускаете какой-либо командлет, то возвращаемые им значения преобразуются в текст и выводятся на экран. Но, это не всегда полезно. Например, если вы хотите передать возвращаемое значение одного командлета на вход другого. Для этого вам полезно будет использовать |, в народе именуемый конвейером.
Например, вы хотите отобразить на экране текст, который содержится во всех файлах формата bat в папке. Для того, чтобы выбрать файлы, выполняйте
И весь файл помощи по реестру сохранён в текстовом файле, который вы теперь можете открыть.
Если вы действительно хотите порадоваться жизни, и понять, что PS способен на многое, то вам придётся применить свой IQ на все 100% и вообразить что-то нереальное.
Выглядит невероятно, а результат даёт потрясающий! Если вы хотите узнать, из какого файла появился процесс, просто пустите его конвейером на get-childitem!
В частности, я сейчас набираю текст в вордпаде:
Вот это меня поразило до глубины души.
Теперь можно переходить к изучению окружения
Как я уже говорил, всё что вы видите на экране не является строками, а является объектами. Например, результат выполнения команды ps возвращает нам список процессов, запущенных в системе.
Но как узнать, что же у нас в руках?
Для этого мы воспользуемся командлетом Get-Member, который откроет нам методы любого класса. Давайте узнаем, что содержится в том же самом процессе, который выдаёт нам команда ps.
Набирайте, и смотрите на список членов класса, которые вы можете увидеть в классе System.Diagnostics.Process. Тоесть, фактически, командлет ps вернул нам массив объектов типа Process и мы можем попрограммировать их!
Давайте поглумимся над блокнотом.
Вот это неплохое количество методов, которые мы можем запустить, используя шелл. И так, как же это сделать? Просто.
Если вы возьмёте результат выполнения командлета в скобки, то вы сможете обратиться к нему, как к объекту в вашей программе, прямо из командной строки.
После запуска этого метода шелл завис и ждёт у моря погоды. Нажмите пару раз Enter. Ничего не происходит. Что же, закройте открытый блокнот. Вуаля, вы снова в шелле.
Я думаю, теперь вы должны погулять свою фантазию. Попробуйте, пустите через конвейер в get-member результаты выполнения ls или других командлетов, каких только можете найти.
Если вы увидели, что в свойстве какого-то объекта лежит ещё один объект, не стесняйтесь пускать его на Get-Member
И так далее до бесконечности.
Задача для пытливых умов. Пролетела новость, что рефлектор станет платным. Как сделать рефлектор на чистом PS? Кстати, это не такая уж и трудная задача.
Ну, вот, мы немного разобрались с тем, как узнать, что нас окружает. Теперь, мы готовы к тому, чтобы понять ещё парочку принципов, существующих в шелле.
Переменные и объекты
И так, пару слов по поводу переменных. В PS они бывают нетипизированными:
Что-же, переменную мы создали, а толку от неё — как с икспи сервака. Никакого. Давайте пофантазируем и подумаем, что мы действительно можем сделать?
А вот это уже другое дело. Только что мы из подручных средств собрали себе wget на коленке. Как вам такой поворот событий?
Что же, в этот момент можно идти в MSDN и подряд перебирать все классы, смотреть, что в них есть интересного. Всё это позволяет создавать очень гибкие скрипты.
Кстати, о скриптах
PS позволяет выполнять скрипты. Ура! Делает он это с волшебного пендаля. Неура. По умолчанию в PS запрещён запуск скриптов, которые не были подписаны цифровой подписью. Для запуска скрипта вы должны его либо подписать (для этого используйте help about_signing) либо, просто понизить уровень безопасности, и выполнить
обычно я делаю второе. Ибо первый вариант требует скачивания многотонных SDK и долгого колдовства. Хотя, напомню о безопасности, и скажу, что второй вариант не канает для супер-сервера-всея-руси.
После выполнения этих действий, вы будете готовы писать свой первый скрипт. Для начала, рекомендую создать для него файл:
(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты.)
Ладно, теперь повторим эту команду без того, чтобы умничать:
Ну, вот, например, то, что лежит у меня в профиле
Так как мы используем прокси сервер, а вэб клиент является моим любимым инструментом для работы, то я уже заготовил для себя переменную с этим клиентом, чтобы иметь возможность безболезненно подключаться к интернету и не отягощать себя вводом пароля.
Что ещё можно запихнуть в профиль?
Всё что угодно. Настройки цвета окна, ваши любимые функции и алиасы. Алиасы на ваши излюбленные программы и скрипты автоматизации…
На самом деле, я уже написал достаточно много. Вы увидели для себя кое-что новое. Я прекрасно знаю, что уровень этой статьи — для начинающих, но и продвинутые админы найдут для себя несколько интересных моментов. Моей задачей было предоставить вам возможность получить общее представление о том, что вы можете сделать.
Что же, вот, напоследок, вам задачи, над которыми можно поломать голову и решить интересные проблемы:
Написать скрипт, который сортирует изображения по папкам, исходя из их размера (для получения размера файла можно использовать дотнет объекты или ком объекты, предоставляемые эксплорером)
Для выполнения этого, вам уж точно понадобиться хорошо изучить Where-Object или Foreach-Object.
Написать парсер для башорга.
Чтобы, после логина в систему, вам на выбор выдавалась цитата из лучших за последние пять лет. Тут можно использовать регэкспы, с которыми PS очень хорошо дружит.
Ещё хочу заметить, что последние версии программного обеспечения от Microsoft поддерживают работу в PowerShell. Например, есть SQL PowerShell, который поставляется с 2008 сиквелом и позволяет сделать ls по записям в любой таблице. Это даёт ещё больший простор для фантазий.
Так же, хочу заметить, что комьюнити по разработке на PS очень сильно растёт и ширится. В частности, вы можете найти скрипты, готовые для чего угодно — например, вы можете нагуглить себе способ управления ITunes через PowerShell или способ использования Google Desktop Search в PS.
Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее. Очень приятно, что ты прочитал мою статью. Спасибо большое, я могу продолжать конкретно описывать определённые области, если вдруг тебе станет очень интересно.