Powershell: как работать с программой, создавать, запускать и изменять скрипты

Не один год прошел с момента выхода Windows 7 и Server 2008. Программисты, системные администраторы и продвинутые пользователи нашли множество применений синему окошку, схожему с командной строкой. Начинающие же юзеры в большинстве своём даже не знают, что такое PowerShell (PS). А ведь скрипты для PowerShell позволяют автоматизировать, без малого, 100% действий и сценариев, выполняемых в операционной системе посредством командной строки и графического интерфейса. С основными возможностями этой программы и ознакомимся, побольше внимания уделив функции создания и запуска скриптов (микропрограмм).

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

Содержание:

Что собой представляет Windows PowerShell?

PowerShell – интерпретатор командной строки CMD на основе .NET Framework, наделённый собственным языком сценариев. Первое значит, что работает он в текстовом режиме: вводишь запускаешь команду, а на экране видишь результат её выполнения. Как это было в MS-DOS и старых версиях UNIX’а. Второе значительно упрощает, ускоряет и автоматизирует администрирование, обслуживание систем, приложений, процессов и связанных с ними сервисов администраторами и простыми юзерами.

Для Vista, XP и более старых редакций Windows, если их кто-то использует, PowerShell можно установить с пакета Windows Management Framework.

По сравнению с другими интерпретаторами, PS отличается:

  • интеграцией с .NET Framework – позволяет создавать мощные скрипты, внедряя в них программный код;
  • все возвращаемые данные являются объектами, а не данными текстового/строчного типа (string), что подразумевает их передачу другим скриптам и любую обработку.

 

Рис. 1 – Вид окна PowerShell

Рис. 1 – Вид окна PowerShell

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

  • Возможность представления команд в виде командлетов – их запуск осуществляется внутри интерпретатора, в ином случае команда выполняется в отдельном процессе.
  • Использование конвейеров – предназначены для передачи данных из одной команды в другую с сохранением их структуры и типа.
  • Интегрирована многопоточная передача данных по сети с установкой приоритетности и возобновлением соединения.
  • Поддержка позиционных и именованных параметров.
  • Фоновая работа – асинхронный вызов команд и запуск скриптов на удалённых машинах.
  • Установка ограниченных сессий с удалёнными клиентами и выполнение сценариев на них.
  • Модули – способ организации скриптов, когда они становятся самодостаточными и выполняются в собственном контейнере, не влияя на окружение модуля.
  • Наличие обработчика ошибок.
  • Графическая среда для языка: синтаксис, отладчик, подсветка, автоматическое завершение команд с поддержкой Юникод и закладок.
  • Добавление точек прерывания в строки, команды, операции и переменные для отладки сценария.
  • Блочные и подстрочные комментарии.
  • Поддержка создания алиасов для некоторых командлетов, преобразовывающихся в обычные команды в момент выполнения.
  • Создание ограниченных сессий, где можно выполнять строго заданный перечень команд и очень многое другое.

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

Приступать к освоению интегрированного скриптового языка, не имея навыков программирования, можно. Создать сложный сценарий получится вряд ли, но выполнять последовательности примитивных действий получится едва ли не у каждого. Хотя, не обладая знаниями об основных понятиях PowerShell, сделать в окне командного интерпретатора вряд ли что-либо получится. С них и начнём.

вернуться к меню ↑

Командлеты

Командлеты – своеобразные команды PS, за которыми скрываются самые разные функции. Встроенные в интерпретатор команды реализованы по принципу «глагол-имя существительное», например, Get-Process (получение списка процессов). Такое решение позволяет понимать суть команды уже из её названия (на английском языке).

Часть командлетов поддерживает получение/передачу данных и массивов информации с сохранением их структуры и типа. Это работает по принципу конвейера (речь об этом пойдёт в следующем разделе). Несмотря ни на что, командлеты запускаются и обрабатывают объекты строго порядку.

Для реализации командлетов могут задействоваться любые поддерживаемые .NET API, созданные на любом из .NET-языков. Таким образом юзеру предоставляется доступ до специфических функций программы. Командлеты умеют эксплуатировать API для получения доступа к требуемой информации напрямую или через уникальные пути (буквы дисков и пути к директориям). Посредством командлетов можно работать с реестром Windows, объектами файловой системы и хранилища сертификатов, установленными приложениями и службами.

вернуться к меню ↑

Конвейер

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

В состав передаваемой информации может входить и функция. После окончания работы объединённых команд вызывается функция превращения информации в текстовый вид (конвертация данных в строковые) с применением форматирования текста.

вернуться к меню ↑

Скрипты

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

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

Скрипты в PowerShell еще больше упростят и автоматизируют работу за ПК и его обслуживание, особенно, если в сценарии присутствуют разветвления, условия, логические операции и циклы.

Но здесь «не всё золото, что блестит»: написать собственный сценарий или загрузить готовый (пускай и немного подогнав его под собственные цели) так просто не получится.

Если бы в Microsoft это разрешили, сколько бы бед наделали скрипты для PowerShell, написанные мошенниками и недоброжелателями в корыстных или хулиганских целях.

Для выполнения макроса в Windows PS необходимо пройти контроль его запуска. Если он не пройден, а скрипт должен выполниться, придётся изменить конфигурацию отвечающих за безопасность макросов объектов.

вернуться к меню ↑

Прежде чем пользоваться скриптами

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

Запуск скачанного скрипта на пользовательской машине – простой и действенный вариант распространения вредоносного программного обеспечения или кражи персональной информации злоумышленниками.

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

Преднамеренный запуск макросов происходит после изменения уровня безопасности, если юзер даст добро, осознавая, что он делает, и зная наверняка, что в файле *.ps1 находится.

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

Оболочка обладает тремя уровнями безопасности:

  • файлы с расширением ps1 не идентифицируются системой как исполняемые и обозначаются как неизвестные или текстовые (по двойному клику открываются в используемом на компьютере по умолчанию текстовом редакторе);
  • оболочка позволяет выполнять скрипты после указания к ним полного пути, скриптовые файлы в текущей директории не ищутся, делая невозможным выполнения макросов, расположенных в текущем каталоге;
  • запуск встроенного скрипта Execution Policy, отвечающего за добавление в перечень разрешенных скриптов требуемого.

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

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

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

Проверить текущее состояние политики запуска можно командой «Get-ExecutionPolicy». Какой бы ни была политика безопасности, пользователь не сможет запустить скрипт, в котором содержатся команды, на выполнение коих у него недостаточно привилегий.

вернуться к меню ↑

Запуск PowerShell

От теории пора переходить к практике. Итак, для выполнения скриптов необходимо получить цифровую подпись или понизить политику безопасности (второй вариант попроще). Вызвать окно PowerShell можно несколькими путями.

Представлено оно в двух видах:

  • классическая консоль;

Рис. 2 – Окно PowerShell

Рис. 2 – Окно PowerShell

  • PowerShell ISE – добавляет поддержку вкладок, синтаксиса, контекстной справки, контекстного и главного и меню, что в значительной мере облегчает работу в интерпретаторе.

Рис. 3 – Внешний вид PowerShell ISE

Рис. 3 – Внешний вид PowerShell ISE

вернуться к меню ↑

Пуск

Проще всего вызвать PS через Пуск.

  1. Открываем меню (в Windows 7 кликаем «Все программы»).
  2. Идём в каталог Windows PowerShell и кликаем по нужной иконке.
powershell скрипты

Рис. 4 – Запуск PS через Пуск

Также вызвать PS через можно с помощью интегрированной поисковой системы.

Рис. 5 – Запуск PS через поиск

Рис. 5 – Запуск PS через поиск

вернуться к меню ↑

Командный интерпретатор

Кто любит нестандартные и быстрые способы запуска, воспользуйтесь окном «Выполнить». Оно открывается одноимённой кнопкой в Пуске и комбинацией клавиш Win+R.

В диалоговом окне пишем «powershell» и жмём «Ввод».

Рис. 6 – Запуск PS через диалог «Выполнить»

Рис. 6 – Запуск PS через диалог «Выполнить»

вернуться к меню ↑

Win+X

В Windows 10 PS можно вызывать из меню WinX. Дело в том, что по умолчанию путём клика по команде «Командная строка» открываемся CMD. Её можно заменить на PowerShell.

Открываем «Свойства» Панели задач, во вкладке «Навигация» ставим галочку возле единственной опции и сохраняем настройки.

Рис. 7 – Замена командной строки на PowerShell в меню WinX

Рис. 7 – Замена командной строки на PowerShell в меню WinX

 

Можно вызывать PowerShell через командную строку, прописав в ней «powershell» или запуском исполняемого файла по пути: %WINDIR%\System32\WindowsPowerShell\v1.0 для 32-битных систем и по адресу %WINDIR%\ syswow64\WindowsPowerShell\v1.0 для 64-разрядных Windows любой редакции.

powershell скрипты

Рис. 8 – Запуск PS из каталога, где хранится его исполняемый файл

вернуться к меню ↑

Настройка политики безопасности

Осталось немного – разрешить PowerShell выполнение скриптов. Прописываем команду «Set-ExecutionPolicy RemoteSigned» и жмем «Y».

Рис. 9 – Изменение политики выполнения

Рис. 9 – Изменение политики выполнения

На этом всё. Теперь можете выполнять любые командлеты и скрипты. Попробуем, например, отобразить список активных процессов, выполнив «Get-Process».

Рис. 10 – Результат выполнения первой команды

Рис. 10 – Результат выполнения первой команды

вернуться к меню ↑

Запуск скриптов

Создавать сценарии можно в любом текстовом редакторе (лучше остановиться на Win, Notepad++ или подобному, с поддержкой синтаксиса или проверки) либо в программе PowerShell ISE. Последняя предоставляет удобный доступ к командлетам, возможности запуска, отладки и сохранения сценариев.

Предположим, что свой первый скрипт вы написали (это получение перечня запущенных процессов), сохранили через меню «Файл», и его нужно запустить. Делается это тремя путями:

1 Прописываем полный путь к скрипту в PowerShell (или ISE);

Рис. 11 – Запуск первого скрипта путём прописывания пути к нему

Рис. 11 – Запуск первого скрипта путём прописывания пути к нему

2 Через контекстное меню файла ps1;

Рис. 12 – Запуск сценария через его контекстное меню

Рис. 12 – Запуск сценария через его контекстное меню

3 Открываем сценарий в PowerShell ISE и жмём F

powershell скрипты

Рис. 13 – Запуск скриптов из окна PowerShell ISE

Важно, чтобы в пути к файлу отсутствовали пробелы!

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

Дмитрий Самолюк

«Только инновация отличает лидера от догоняющего»

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.
Geek-Nose
Register New Account
Пароль