Скрипт powershell расширение файла

Обновлено: 04.07.2024

  • политики - у вас могут блокироваться запуски сценариев имеющие расширения скриптовых языков;
  • понятное назначение - все пользователи Windows знают для чего нужны файлы с буквами .exe на конце названия. Расширение .ps1 может вызывать вопросы даже у администраторов;
  • запуск - exe файл запускается двойным кликом, а ps1 - через консоль с настроенной политикой безопасности;
  • редактирование - поместив сценарий Powershell в exe файл его будет сложнее отредактировать;
  • срытие консоли - простой запуск скриптов PS1 всегда вызывает окно консоли. Один из способов обойти его - с помощью exe файла.

Еще нужно отметить, что exe файл можно рассмотреть как архив с файлами. То есть мы можем поместить в 1 exe файл сам сценарий Powershell и файлы (например пароли, адреса, таблицы и т.д.). Это преимущество избавляет нас от ситуации с отсутствующими файлами и доступами к ним, которые могут быть у обычного сценария.

Навигация по посту

В этой статье будут рассмотрено несколько способов создания .exe файлы из .ps1. Самыми удобными и легкими способами - являются первые 3. Способы должны подойти для интерпретаторов Powershell 5.1+ и 6-7+. В конце статьи есть таблица с итогами.

PS2EXE

Модуль ps2exe имеет консольный и графический режим работы. На мой взгляд PS2EXE - это самый простой и удобный способ создания EXE по следующим причинам:

  1. Доступен из репозитория Powershell;
  2. Единственное предназначение модуля - конвертация форматов;
  3. Есть консольный вариант и в стиле PS;

У этого способа так же есть и минус. Как сообщал автор проекта с помощью этого модуля, когда-то, был упакован в .exe вирус. После этого, некоторые антивирусы, стали срабатывать на файлы .exe упакованные этим модулем. Мой антивирус таких сигнатур не нашел. Проект популярный и имеет 200 звезд и с открытым кодом. Тем не менее доверять автору или нет - решать вам.

Установить его можно с помощью следующей команды:

Вам может пригодится основная информация по модулю, которую можно получить так:

Установка ps2exe для конвертации файлов exe в Powershell

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

Консоль

У модуля есть несколько алиасов, которые работают одинаково. Самый простой способ создания exe файла следующий:

Конвертация файлов ps1 в exe в Powershell

У команды модуля есть ряд дополнительных параметров увидеть которые можно в справке:

Справка по компиляции файлов Powershell с ps2exe

Отмечу наиболее важные параметры:

  • x86-x64 - компиляция под определенную архитектуру. Если этого не указано, то используется значение по умолчанию (обе архитектуры);
  • title - заголовок консоли;
  • noConsole - не отображает консоль при запуске скрипта;
  • requireAdmin - запрашивать права администратора (UAC);
  • credentialGUI - вывод диалогового окна для ввода учетных данных.

Если вы используете параметр noConsole, обратите на разное поведение с выводом в stdout. Без указания параметра noConsole - все будет выведено в консоль, а с параметром - в диалоговые окна.

В примере ниже я создал exe файл, который выполняет одну команду "New-Item". Эта команда возвращает информацию о созданном объекте. Если вы не помещаете результат команды в переменную, то он попадает в stdout. Результат команды будет выведен построчно в диалоговых окнах:

Проблема с stdout в Powershell

PS2EXE доступен и в графическом варианте. Папка, в которой лежит файл для запуска GUI, указана в описании модуля (на скриншоте выше). Обычно это один из следующих путей:

Конвертация файлов в exe в Powershell с GUI

Параметры графического интерфейса достаточно очевидны и не нуждаются в дополнительном объяснении.

Как работать в Powershell с модулями и профилями и повторно использовать данные

IExpress 2.0

Отличительной особенностью этого способа в том, что он уже установлен в Windows. IExpress предназначен не только для сценариев Powershell. Основная задача программы создания .exe для установки и запуска программ и поэтому имеет больше возможностей. Запустить редактор вы можете через любую консоль:

IEXpress для конвертации Powershell файлов в exe

Большая часть выбора предназначена для случаев, если вы планируете установить какую-то программу (распаковать в Program Files, реестр и т.д.), а не просто запустить .exe. Из-за этого большую часть выбора можно оставить по умолчанию. На скриншоте выбраны те пункты, которые понадобятся вам для конвертации ps1 в exe:

Конвертация ps1 в exe c Powershell и IExpress

  1. В конце этих диалоговых окон у вас появится файл со всеми выборами и настройками, которые вы сделали. Этот файл можно импортировать тут что бы не повторять этих действий;
  2. Вам нужно создать exe файл, который будет распакован в памяти и запущен. Другие варианты, наверное, нужны для установки;
  3. Выбор заголовка окна после запуска .exe;
  4. Нужно ли у пользователя спрашивать разрешение на установку программы;

Конвертация ps1 в exe c Powershell и IExpress

Конвертация ps1 в exe c Powershell и IExpress

Останутся еще 2 окна, которые не будут иметь выборов. После этого появится файл .exe пригодный для запуска.

В IExpress, в отличие от других программ, нельзя установить требования к привилегиям. Вы либо явно запускаете программу от администратора или от обычного пользователя (в песочнице).

ISE Steroids

В Windows есть собственный редактор для сценариев Powershell, который называется ISE (Integrated Scripting Environment). Для этого редактора существует расширение с названием ISE Steroids. Расширение добавляет множество функций и одна из функций - это конвертация файлов. Плюсы этого способа от следующих в том, что оно бесплатное, до сих пор поддерживается и является расширением (а не полноценной программой).

Существует несколько способов установки этого расширения. Самый простой из репозитория:

После установки, в самом ISE нужно выполнить следующую команду:

После установки расширения, зайдя в "Сервис", можно увидеть кнопку "Turn Code into EXE. ":

Конвертация ps1 в exe c Powershell ISE Steroids

В новом окне настраивается версионность приложения, поведение окна консоли при запуске приложения, устанавливается иконка и привилегии для запуска. При нажатии на кнопку "Create Application" - нужно указать путь для сохранения готового файла:

Конвертация ps1 в exe c Powershell ISE Steroids

PS1 to EXE

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

Консоль

После установки файл, для запуска консоли, находится в одной из следующих папок:

Консольный вариант команды не несет принципов Powershell в наименовании ключей. "PS1 to exe" использует стиль CMD. Пример создания exe файла без показа консоли:

Конвертация файлов Powershell ps1 в exe c PS1toEXE

Параметр /include добавляет в exe дополнительные файлы и папки.

Справка PS1 to EXE

Графический интерфейс программы имеет так же встроенный редактор кода. После открытия файла мы увидим следующую картинку:

Графический редактор PS1 to EXE

  1. Файл, который будет добавлен в exe;
  2. Дополнительные настройки для конвертации;
  3. Выбор дополнительных файлов, если вы планировали их включить;
  4. Конвертация в exe.

VSCode и Powershell Pro Tools

VSCode - это современный редактор кода от Microsoft. Он поддерживает множество языков через разные расширения, в том числе и Powershell. Одно из таких расширений, Powershell Pro Tools, позволяет выполнять конвертацию ps1 в exe. Единственный плюс этого способа в том, если вы пользователь VSCode. Минут - расширение платное.

Выглядит это расширение следующим образом:

VSCode плагин для конвертации ps1 в exe

После установки расширения и открытии вашего скрипта вам нужно нажать кнопку в правом-верхнем углу экрана для создания .exe файла. При первом нажатии на кнопку, в корневой директории VSCode создается файл конфигурации с расширением "psd1". В этом файле, будет указан путь куда будет сохранен .exe файл:

Конвертация в VSCode файлов Powershell ps1 в exe

Конвертация в VSCode файлов Powershell ps1 в exe

Powershell Studio

Еще один способ создать exe это использовать Powershell Studion. Эта программа - крупный IDE, который разрабатывался специально под Powershell и, конечно, он является платным (45 дней trial).

После открытия файла в IDE нужно открыть настройки пакетов:

Конвертация файлов Powershell ps1 в exe с Powershell Studio

Выбор интерпретатора для конвертации ps1 в exe с Powershell Studio

В следующем окне нужно выбрать путь, где файл должен быть сохранен и выполнить билд:

Выбор места сохранения при конвертации файла Powershell ps1 в exe с Powershell Studio

У Powershell Studio есть много преимуществ. Например он может подписывать конвертированные файлы вашим сертификатом - такой возможности, в других программах, нет.

Остальные варианты

В статье перечислена только часть программ, которые могут выполнить конвертацию. Есть множество других программ. Например редактор PowerGUI. Этот проект был закрыт более 4 лет назад т.к. он был выкуплен компанией DELL. Инсталлятор можно найти только на не официальных сайтах. Из-за отсутствия обновления и поддержки я не стал его включать в список.

Так же есть следующая найденная таблица, которая примерно суммирует написанное выше. Отмечу, что я нашел в ней ошибки - ISE Steroids, например, бесплатное расширение. Могут быть и другие.

Сценарий — это обычный текстовый файл, содержащий одну или несколько команд PowerShell. Сценарии PowerShell имеют .ps1 расширение файла.

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

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

Выполнение сценария

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

Политика выполнения по умолчанию Restricted предотвращает выполнение всех скриптов, включая скрипты, которые вы пишете на локальном компьютере. Подробнее см. в разделе about_Execution_Policies.

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

Чтобы изменить политику выполнения, используйте следующую процедуру.

В командной строке введите:

Изменение вступает в силу немедленно.

Чтобы выполнить сценарий, введите полное имя файла скрипта и полный путь к нему.

Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

Чтобы выполнить сценарий в текущем каталоге, введите путь к текущему каталогу или используйте точку для представления текущего каталога, после чего следует обратная косая черта ( .\ ).

Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:

Если у скрипта есть параметры, введите параметры и значения параметров после имени файла скрипта.

Например, следующая команда использует параметр ServiceName скрипта Get-ServiceLog, чтобы запросить журнал действия службы удаленного управления Windows.

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

Запуск с помощью PowerShell

Начиная с PowerShell 3,0 можно запускать сценарии из проводника.

Чтобы использовать функцию "Запуск с помощью PowerShell", сделайте следующее:

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду "запустить с помощью PowerShell".

Функция "запустить с помощью PowerShell" предназначена для выполнения скриптов, которые не имеют обязательных параметров и не возвращают выходные данные в командную строку.

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение сценариев на других компьютерах

Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр FilePath Invoke-Command командлета.

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

Следующая команда запускает Get-ServiceLog.ps1 сценарий на удаленных компьютерах с именем Server01 и Server02.

Получить справку по сценариям

Командлет Get-Help получает разделы справки для скриптов, а также для командлетов и других типов команд. Чтобы получить раздел справки для скрипта, введите, Get-Help за которым следует путь и имя файла скрипта. Если путь к скрипту находится в Path переменной среды, путь можно опустить.

Например, чтобы получить справку по сценарию ServicesLog.ps1, введите:

Написание сценария

Скрипт может содержать любые допустимые команды PowerShell, в том числе отдельные команды, команды, использующие конвейер, функции и управляющие структуры, такие как операторы If и циклы for.

Чтобы написать сценарий, откройте новый файл в текстовом редакторе, введите команды и сохраните их в файле с допустимым именем файла с .ps1 расширением.

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

Чтобы создать этот скрипт, откройте текстовый редактор или редактор скриптов, введите следующие команды, а затем сохраните их в файле с именем ServiceLog.ps1 .

Параметры в скриптах

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

При выполнении скрипта пользователи заменяют параметры после имени скрипта.

В следующем примере показан Test-Remote.ps1 скрипт с параметром ComputerName . Обе функции сценария могут обращаться к значению параметра ComputerName .

Чтобы выполнить этот скрипт, введите имя параметра после имени скрипта. Пример:

Дополнительные сведения о инструкции Param и параметрах функции см. в разделе about_Functions и about_Functions_Advanced_Parameters.

Написание справки для сценариев

Раздел справки для скрипта можно написать с помощью любого из двух следующих методов.

Comment-Based справки по сценариям

Создайте раздел справки, используя специальные ключевые слова в комментариях. Чтобы создать справку на основе комментариев для сценария, необходимо поместить комментарии в начало или в конец файла скрипта. Дополнительные сведения о справке на основе комментариев см. в разделе about_Comment_Based_Help.

XML-Based справки по сценариям

Создайте раздел справки на основе XML, например тип, который обычно создается для командлетов. При преобразовании разделов справки на несколько языков требуется справка на основе XML.

Чтобы связать скрипт с разделом справки на основе XML, используйте. Ключевое слово комментария справки Екстерналхелп. Дополнительные сведения о ключевом слове Екстерналхелп см. в разделе about_Comment_Based_Help. Дополнительные сведения о справке на основе XML см. в разделе как написать справку по командлетам.

Возврат значения выхода

По умолчанию скрипты не возвращают состояние выхода при завершении сценария. exit Для возврата кода выхода из скрипта необходимо использовать инструкцию. По умолчанию exit инструкция возвращает 0 . Можно указать числовое значение, чтобы вернуть другое состояние выхода. Ненулевое значение кода выхода обычно сигнализирует об ошибке.

в Windows допускается любое число между [int]::MinValue и [int]::MaxValue .

В UNIX разрешены только положительные числа в диапазоне от [byte]::MinValue (0) до [byte]::MaxValue (255). Отрицательное число в диапазоне от -1 до -255 автоматически преобразуется в положительное число путем добавления 256. Например, -2 преобразуется в 254 .

В PowerShell exit инструкция задает значение $LASTEXITCODE переменной. в Windows командной оболочке (cmd.exe) оператор exit задает значение %ERRORLEVEL% переменной среды.

Любой аргумент, который не является числовым или вне диапазона, зависящего от платформы, преобразуется в значение 0 .

Область скрипта и источники с точкой

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

Чтобы выполнить скрипт в другой области, можно указать область, например Global или local, или создать точку для скрипта.

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

Чтобы создать точку скрипта для исходного кода, введите точку (.) и пробел перед путем к сценарию.

или диспетчер конфигурации служб

После UtilityFunctions.ps1 выполнения скрипта функции и переменные, создаваемые сценарием, добавляются в текущую область.

Например, UtilityFunctions.ps1 Скрипт создает New-Profile функцию и $ProfileName переменную.

При запуске UtilityFunctions.ps1 скрипта в собственной области скрипта New-Profile функция и $ProfileName переменная существуют только во время выполнения скрипта. При завершении работы скрипта удаляется функция и переменная, как показано в следующем примере.

Когда вы подаете скрипту точку и запускаете его, сценарий создает New-Profile функцию и $ProfileName переменную в своем сеансе в вашей области. После выполнения скрипта можно использовать New-Profile функцию в сеансе, как показано в следующем примере.

Дополнительные сведения об области действия см. в разделе about_Scopes.

Скрипты в модулях

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

Можно включить скрипты в модули или создать модуль скрипта, который представляет собой модуль, полностью или в основном содержащий скрипт и вспомогательные ресурсы. Модуль скрипта — это просто сценарий с расширением файла PSM1.

Дополнительные сведения о модулях см. в разделе about_Modules.

Другие функции сценариев

В PowerShell есть много полезных функций, которые можно использовать в скриптах.

$PSCommandPath — Содержит полный путь и имя выполняемого скрипта. Этот параметр допустим во всех скриптах. Эта автоматическая переменная появилась в PowerShell 3,0.

$PSScriptRoot — Содержит каталог, из которого выполняется скрипт. В PowerShell 2,0 эта переменная допустима только в модулях скриптов ( .psm1 ). Начиная с PowerShell 3,0, он действителен во всех скриптах.

$MyInvocation — $MyInvocation Автоматическая переменная содержит сведения о текущем скрипте, включая сведения о том, как он был запущен или вызван. Эту переменную и ее свойства можно использовать для получения сведений о скрипте во время его выполнения. Например, $MyInvocation . Переменная Микомманд. path содержит путь и имя файла скрипта. $MyInvocation . Строка содержит команду, которая запустила скрипт, включая все параметры и значения.

Начиная с PowerShell 3,0, $MyInvocation имеет два новых свойства, которые предоставляют сведения о скрипте, который вызывал или вызывает текущий скрипт. Значения этих свойств заполняются только в том случае, если вызывающий элемент или вызвавший объект является сценарием.

Пскоммандпас содержит полный путь и имя скрипта, который вызывал или вызывает текущий скрипт.

PSScriptRoot содержит каталог скрипта, вызвавшего или вызвавшего текущий скрипт.

В отличие от $PSCommandPath и $PSScriptRoot автоматических переменных, содержащих сведения о текущем скрипте, свойства пскоммандпас и PSScriptRoot этой $MyInvocation переменной содержат сведения о скрипте, вызвавшем текущий скрипт.

Разделы данных. Вы можете использовать Data ключевое слово для разделения данных из логики в скриптах. Разделы данных также могут упростить локализацию. Дополнительные сведения см. в разделе about_Data_Sections и about_Script_Internationalization.

Подпись скрипта. Вы можете добавить цифровую подпись к сценарию. В зависимости от политики выполнения можно использовать цифровые подписи для ограничения выполнения скриптов, которые могут включать ненадежные команды. Дополнительные сведения см. в разделе about_Execution_Policies и about_Signing.

1. Написание скрипта

Скрипт PowerShell (не важно какой версии) - это текстовый файл с расширением *.ps1 .

Вот пример простого Power Shell срипта (файл systemInfo.ps1 ):

Этот файл можно создавать и редактировать, например, в FAR Manager.

Обратите внимание , что FAR Manager хоть и может работать в консоли Power Shell, но выполняет из-под себя скрипты в окружении обычной Windows-консоли cmd . То есть, FAR Manager можно использовать только для создания и редактирования PowerShell скриптов, но не для запуска. Но прежде чем разочаровываться, прочитайте пункт 3.

2. Запуск срипта

Скрипт нужно выполнять из консоли Power Shell, а не из обычной консоли Windows. В консоли Power Shell необходимо перейти в каталог, где лежит скрипт (командами cd ), и затем запустить сам скрипт, обязательно прописав перед ним символы ".\" . Например, имеем путь к файлу скрипта d:\work\systemInfo.ps1 . Тогда команды запуска будут выглядеть так:

или так (просто указывается полный путь к скрипту):

Скорее всего, при запуске скрипта появится следующая ошибка:

Не удается загрузить файл D:\work\systemInfo.ps1, так как выполнение скриптов запрещено для данной системы. Введите "get-help about_signing" для получения дополнительных сведений.

строка:1 знак: 18

+ CategoryInfo : NotSpecified: (:) [], PSSecurityException

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

Чтобы резрешить выполнение PowerShell скриптов, нужно создать *.bat файл, например enableScript.bat со следующим содержимым:

powershell -Command Set-ExecutionPolicy RemoteSigned

Этот *.bat файл можно выполнить в любой консоли: хоть в PowerShell, хоть в обычной cmd . После выполнения этого файла, PowerShell-скрипты станут запускаться в консоли PowerShell.

3. Запуск PowerShell-скрипта из обычной Windows-консоли cmd

Скрипт PowerShell можно выполнить и из обычной консоли Windows. Для этого можно воспользоваться командой:

Powershell -File ./systemInfo.ps1

Таким образом можно выполнять скрипты прямо из FAR Manager, и они будут работать.

Но тут есть небольшая тонкость. Параметр -File срабатывает только на локальных путях, даже если путь указан относительный "./" . То есть, если *.ps1 - файл лежит на локальном диске C: или D: , то такой вызов будет работать. Но если попробовать выполнить скрипт, расположенный на доменном ресурсе, то скрипт не будет найден. Возможно, это исправят в следующих версиях PowerShell.


В качестве хобби и при наличии времени преподаю студентам в УКИТ (бывший Московский государственный колледж информационных технологий). На данный момент у меня мало времени, чтобы уделить его группе студентов, зато вполне достаточно, чтобы подготовить пост здесь, на Хабре.

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

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

Внимание: PowerShell вызывает привыкание.

Введение

Windows PowerShell — расширяемое средство автоматизации от Microsoft, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев.

Выглядеть среда PowerShell может так, как командная строка:



powershell.exe

Или в виде приложения:



powershell_ise.exe

Powershell_ise.exe называется интегрированной средой сценариев — Windows PowerShell ISE. Позволяет работать с языком в удобной среде с подсветкой синтаксиса, конструктором команд, автозаполнением команд по нажатию TAB и прочими прелестями. Идеальна для создания и тестирования сценариев.

Для запуска среды powershell.exe или powershell_ise.exe достаточно набрать аналогичное название в строке выполнить.


Файл сценария PowerShell имеет расширение .ps1.


Сценарий не получится запустить двойным ЛКМ. Это сделано специально для того, чтобы не нанести вред системе случайно запущенным скриптом.

Для запуска, по клику ПКМ следует выбрать «Выполнить с помощью PowerShell»:


Помимо того, что существует ограничение по запуску сценариев ЛКМ, по умолчанию выполнение сценариев в системе запрещено, опять же, по описанной выше причине — не нанести вред системе. Для проверки текущей политики выполнения выполним команду:


Мы получим одно из следующих ниже значений. С большой вероятностью, если это был первый запуск, мы получим Restricted.

  • Restricted — Сценарии не могут быть запущены;
  • AllSigned — Могут быть запущены только сценарии, подписанные доверенным издателем. Перед выполнением сценария доверенного издателя будет запрашиваться подтверждение;
  • RemoteSigned — Разрешено выполнять созданные нами сценарии и скачанные сценарии, подписанные доверенным издателем;
  • Unrestricted — Никаких ограничений, все скрипты могут быть запущены.

Для выполнения и тестирования понизим политику до RemoteSigned выполнив команду:


Приступаем к работе

Командлет
  • Командлетами называются команды PowerShell, в которых заложена различная функциональность;
  • Командлеты могут быть как системными, так и пользовательскими, созданные кем-либо;
  • Командлеты именуются по правилу Глагол-Существительное, что упрощает их запоминание;
  • Командлеты выводят результаты в виде объектов или их коллекций;
  • Командлеты могут как получать данные для обработки, так и передавать данные по конвейеру (про конвейеры позже);
  • Командлеты не чувствительны к регистру (можно написать и get-process, и Get-Process, и GeT-pRoCeSs);
  • После командлетов не обязательно ставить ";", за исключением, когда мы выполняем несколько командлетов в одну строку (Get-Process; Get-Services).

Например, для получения текущих процессов, мы выполним команду:

И получим результат:


Попробуйте самостоятельно выполнить:

Не обязательно знать наизусть все командлеты. Get-Help спасёт ситуацию.
Информацию о всех доступных командлетах можно получить, введя следующую команду:

Если мы используем PowerShell ISE, мы облегчаем процесс разработки.
Достаточно ввести знак тире "-" после того, как ввели командлет, и мы получим все возможные варианты параметров и их типы:


Если, всё же, мы забудем какие свойства есть у того или иного командлета, прогоним его через Get-Member:


Недостаточно информации? Обратимся к справке с параметром -Examples:

Получаем описание Get-Process, да ещё и с примерами использования:


  • Командлеты могут иметь сокращённые названия — алиасы. Например, вместо Get-Help можно использовать просто Help. Для получения всех сокращений выполните Get-Alias.

Что аналогично записи:

А теперь остановим процесс:

Немногим ранее мы сказали, что командлеты именуются по правилу Глагол-Существительное. Уточню, что глагол не обязательно должен быть Get. Помимо того, что мы можем получать, мы можем задавать Set (помните, Set-ExecutionPolicy), запускать Start, останавливать Stop, выводить Out, создавать New и многие другие. Название командлета ни чем не ограничивается и, когда мы будем с вами создавать свой собственный, сможем назвать его так, как душе угодно.

Попробуем выполнить вывод в файл:

Кстати, аналогично можно записать так:

Комментарии

Мы все знаем, использовать комментарии является хорошим тоном.


Обратим внимание, на код из примера:

Для тех, кто знаком с WMI, кто делает это на старом добром VBScript, помните, сколько кода надо написать?

Конвейер

Конвейер (|) — передаёт выходные данные одной команды во входные данные на обработку другой команде. Мы использовали конвейер ранее, получая все свойства объекта или, в предыдущем примере, выбирая из набора данных только поле Caption.

Чтобы понять принцип конвейера, давайте выполним код:

Что произойдёт: получаем все службы (Get-Service), передаём все полученные службы на сортировку в командлет Sort-Object и указываем, что хотим отсортировать их по параметру Status. На выводе мы получим сначала все службы со статусом Stop, а потом все службы со статусом Running.

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

В примере мы используем $_. Данная запись означает текущий элемент в конвейере.


Послесловие

В этой части мы научились запускать PowerShell, разобрались с политикой выполнения сценариев. Поняли, что такое командлеты, знаем, как передавать их по конвейеру и как получить их свойства. Если мы что-то забудем, обязательно Get-Help.

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

Читайте также: