Общая информация по созданию сценариев

Завершено

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

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

Перед началом обучения созданию сценариев давайте рассмотрим компоненты языка сценариев PowerShell:

  • Переменные. Переменные можно использовать для хранения значений. Вы также можете использовать переменные в качестве аргументов команд.

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

    Примечание.

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

  • Управление потоком. Управление потоком — это способ управления различными путями выполнения с помощью таких конструкций, как If, ElseIf и Else.

  • Циклы. Циклы — это конструкции, которые позволяют работать с массивами, проверять каждый элемент и выполнять любые операции с каждым элементом. Но циклы – это не просто итерация массива. Можно также продолжить выполнение цикла при определенных условиях с помощью циклов Do-While. Дополнительные сведения см. в разделе О циклах Do.

  • Обработка ошибок. Очень важно, чтобы сценарии были надежными и были способны обрабатывать различные типы ошибок. Необходимо знать разницу между неустранимыми и устранимыми ошибками. Вы будете использовать такие конструкции, как Try и Catch. Мы рассмотрим эту тему в последнем концептуальном блоке этого модуля.

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

  • Интеграция .NET и .NET Core. PowerShell обеспечивает эффективную интеграцию с .NET и .NET Core. Эта интеграция не рассматривается в этом модуле.

Выполнить сценарий

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

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

  • Требование для выполнения сценариев с использованием полного пути или относительного пути. При выполнении сценария всегда необходимо указывать путь к сценарию. Указание пути позволяет точно узнать, какие операции вы выполняете. Например, на компьютере могут быть команды и псевдонимы, которые не нужно выполнять, но которые имеют то же имя, что и сценарий. При указании пути выполняется дополнительная проверка того, что выполняется именно то, что нужно.
  • Политика выполнения. Политика выполнения — это функция обеспечения безопасности. Как и при указании пути к сценарию, политика может предотвратить выполнение непреднамеренных действий. Вы можете задать политику на различных уровнях, например на уровне локального компьютера, текущего пользователя или определенного сеанса. Можно также использовать параметр групповой политики, чтобы задать политики выполнения для компьютеров и пользователей.

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

Чтобы создать и выполнить сценарий:

  1. Создайте инструкции PowerShell, аналогичные приведенным ниже, и сохраните их в файле с расширением .ps1:

    # PI.ps1
    $PI = 3.14
    Write-Host "The value of `$PI is $PI"
    
  2. Выполните сценарий, запустив его по имени и пути:

    Примечание.

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

    ./PI.ps1
    

    Рекомендуется указывать в вызове расширение файла, но это необязательно.

Политика выполнения

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

  • Get-ExecutionPolicy. Этот командлет возвращает текущую политику выполнения. В Linux и macOS возвращается значение Unrestricted. Для этих операционных систем значение изменить нельзя. Это ограничение не делает Linux или Mac менее надежными. Помните, что политика выполнения — это функция безопасности, а не механизм защиты.

  • Set-ExecutionPolicy. Если вы используете компьютер с Windows, можно использовать этот командлет для изменения значения в политике выполнения. Можно задать параметр -ExecutionPolicy. Допустимо несколько значений. Рекомендуется использовать Default в качестве значения. Это значение задает политику для Restricted на клиентах с Windows и RemoteSigned на Windows Server. Restricted означает, выполнение сценариев невозможно. Можно выполнять только команды, имеющие смысл на клиенте. RemoteSigned означает, что можно выполнять сценарии, написанные на локальном компьютере. Сценарии, скачанные из Интернета, должны иметь цифровую подпись от доверенного издателя.

    Примечание.

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

Переменные

Переменные предназначены не только для сценариев. Их также можно задавать в консоли. В переменных можно сохранять значения и использовать их в дальнейшем. Чтобы задать переменную, укажите перед ней символ $. Приведем пример:

$PI = 3.14

Работа с переменными: кавычки и интерполяция

При выводе текста с помощью Write-Host или Write-Output используются одиночные или двойные кавычки. Выбор зависит от того, нужно ли выполнять интерполяцию значений. Есть три способа, о которых следует знать:

  • Одиночные кавычки. Одиночные кавычки задают литералы. Что указано в сценарии, то и будет выполнено. Приведем пример:

    Write-Host 'Here is $PI' # Prints Here is $PI
    

    Если необходимо выполнить интерполяцию, чтобы интерпретировать и вывести на экран значение $PI, необходимо использовать двойные кавычки.

  • Двойные кавычки. При использовании двойных кавычек переменные в строках интерполируются:

    Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14
    

    При этом доступны два варианта. Обратная кавычка (`) позволяет исключить интерполяцию первого экземпляра $PI. Во втором экземпляре значение интерполируется и записывается.

  • $(). Можно также записать выражение в двойных кавычках. Для этого используется конструкция $(). Одним из способов использования этой конструкции является интерполяция свойств объектов. Приведем пример:

    Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
    

Область

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

Типы областей

Рассмотрим различные области:

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

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

  • Локальная область. Локальная область — это текущая область, и она может быть глобальной или любой другой областью.

Правила области

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

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

  • Элементы отображаются в текущей и дочерней областях. Элемент, например переменная или функция, отображается в области, в которой он создан. По умолчанию он также отображается во всех дочерних областях. Это поведение можно изменить, сделав элемент частным в пределах области. Ниже приведен пример использования переменной, заданной в консоли:

    $test = 'hi'
    

    Если у вас есть файл Script.ps1, содержащий следующие элементы, при выполнении сценария отобразится "hi":

    Write-Host $test # Prints hi
    

    Обратите внимание, что переменная $test отображается как в локальной области, так и в ее дочерней области, в данном случае в области сценария.

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

Профили

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

Типы профилей пользователей

PowerShell поддерживает различные файлы профилей. Вы можете применять их на различных уровнях, как показано ниже:

Description Путь
Все пользователи, все узлы $PSHOME\Profile.ps1
Все пользователи, текущий узел $PSHOME\Microsoft.PowerShell_profile.ps1
Текущий пользователь, все узлы $Home[My ]Documents\PowerShell\Profile.ps1
Текущий пользователь, текущий узел $Home[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1

При этом используются две переменные: $PSHOME и $Home. $PSHOME указывает каталог установки для PowerShell. $Home — это домашний каталог текущего пользователя.

Другие программы также поддерживают профили пользователей, например Visual Studio Code.

Создание профиля

При первой установке PowerShell профили отсутствуют, но имеется переменная $Profile. Это объект, указывающий на путь, по которому необходимо разместить профили для использования. Создание профиля

  1. Определите уровень, на котором необходимо создать профиль. Можно запустить $Profile | Select-Object *, чтобы просмотреть типы профилей и связанные с ними пути.

  2. Выберите тип профиля и создайте текстовый файл в соответствующем расположении, используя например, такую команду: New-Item -Path $Profile.CurrentUserCurrentHost.

  3. Добавьте настройки в текстовый файл и сохраните его. Изменения вступят в силу при следующем запуске сеанса.