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

Завершено

Создание сценариев в 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 , содержащий следующее содержимое, он выводит "привет" при запуске скрипта:

    Write-Host $test # Prints hi
    

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

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

Профили

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

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

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

Описание Путь
Все пользователи, все узлы $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. Добавьте настройки в текстовый файл и сохраните его. Изменения вступят в силу при следующем запуске сеанса.