powershell как передать параметр в скрипт

Передача параметров в PowerShell

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

Этот скрипт должен вывести состояние заданного сервиса\сервисов для одного или нескольких компьютеров. Имя сервиса и компьютера передаются в скрипт в качестве аргументов.

Теперь выполним его, указав в качестве аргументов сервис печати (spooler) и имя компьютера SRV1:

.\service.ps1 spooler SRV1

powershell как передать параметр в скрипт

Более эффективным способом передачи параметров является использование в сценарии блока param. Для примера возьмем наш сценарий и изменим его:

Param (
[string]$service,
[string]$computer
)

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

powershell как передать параметр в скрипт

Чтобы вводить меньше текста, имена параметров можно сократить, например так:

.\service.ps1 spooler SRV1

powershell как передать параметр в скрипт

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

Param (
[Parameter (Mandatory=$true, Position=1)]
[string]$service,

[Parameter (Mandatory=$true, Position=2)]
[string]$computer
)

Здесь оба параметра указаны как обязательные (Mandatory=$true) и для каждого задана своя позиция. Это значит, что оба параметра обязательно должны быть указаны и должны идти строго в определенном порядке. Теперь если не указать один из параметров, то PowerShell автоматически напомнит об этом и предложит ввести недостающую информацию.

powershell как передать параметр в скрипт

Использование расширенного синтаксиса позволяет задавать различные ограничения для вводимых параметров. Еще раз изменим сценарий, указав в нем для имени компьютера ограничение в 3 символа (ValidateLength(1,3):

Param (
[Parameter (Mandatory=$true)]
[string]$service,

[Parameter (Mandatory=$true)]
[ValidateLength(1,3)]
[string]$computer
)

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

А такая отработает нормально:

powershell как передать параметр в скрипт

Источник

about_Parameters

Краткое описание

Описание работы с параметрами команд в PowerShell.

Подробное описание

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

Тип параметров и требования к этим параметрам различаются. Чтобы найти сведения о параметрах команды, используйте Get-Help командлет. Например, чтобы найти сведения о параметрах Get-ChildItem командлета, введите:

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

Get-Help Командлет возвращает различные сведения о команде, включая описание, синтаксис команды, сведения о параметрах и примеры, демонстрирующие использование параметров в команде.

Можно также использовать параметр параметра Get-Help командлета для поиска сведений о конкретном параметре. Также можно использовать параметр Parameter с подстановочным знаком ( * ), чтобы найти сведения обо всех параметрах команды. Например, следующая команда получает сведения обо всех параметрах Get-Member командлета:

Значения параметров по умолчанию

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

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

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

Таблица атрибутов параметра

При использовании полных параметров, параметров или сетевого параметра Get-Help командлета Get-Help отображает таблицу атрибутов параметров с подробными сведениями о параметре.

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

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

Требуется параметр

Этот параметр указывает, является ли параметр обязательным, то есть должны ли все команды, использующие этот командлет, включать этот параметр. Если значение равно true и в команде отсутствует параметр, PowerShell запрашивает значение для параметра.

Расположение параметра

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

Например, Get-ChildItem командлет содержит параметры Path и Exclude. Position Параметр path имеет значение 0, что означает, что он является позиционированным параметром. Position Параметр Exclude имеет имя.

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

В результате Position настройки этих двух параметров можно использовать любую из следующих команд:

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

Тип параметра

Значение по умолчанию

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

Принимает несколько значений

Этот параметр указывает, принимает ли параметр несколько значений параметров. Если параметр принимает несколько значений, можно ввести разделенный запятыми список в качестве значения параметра в команде или сохранить список с разделителями-запятыми (массив) в переменной, а затем указать переменную в качестве значения параметра.

Например, параметр Name Get-Service командлета принимает несколько значений. Допустимы следующие команды:

Принимает входные данные конвейера

Этот параметр указывает, можно ли использовать оператор конвейера ( | ) для отправки значения в параметр.

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

Например, можно передать значение в параметр Name только в том случае, если у значения есть свойство с именем Name.

Типизированный параметр, который принимает входные данные конвейера ( by Value ) или ( by PropertyName ), позволяет использовать блоки скриптов с отложенной привязкой для параметра.

Сведения о блоках скриптов с отложенной привязкой можно узнать здесь about_Script_Blocks. md

Принимает подстановочные знаки

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

Общие параметры

Общие параметры — это параметры, которые можно использовать с любым командлетом. Дополнительные сведения об общих параметрах см. в разделе about_CommonParameters.

Источник

Что такое Windows PowerShell и с чем его едят? Часть 3: передача параметров в скрипты и функции, создание командлетов

powershell как передать параметр в скрипт

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

Оглавление:

Позиционные параметры
Блок Param()
Дополнительные атрибуты параметров
Передача параметров через конвейер
Структура тела функции
Атрибут [CmdletBinding()] и расширенные функции
Модули сценариев и создание командлетов

Позиционные параметры

powershell как передать параметр в скрипт

В функциях позиционные параметры используются аналогично:

Print-Args «Ноль» «Один»

powershell как передать параметр в скрипт

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

Блок Param()

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

Корпорация Microsoft рекомендует использовать блок Param() — этот синтаксис более универсален и позволяет задавать не только аргументы функций, но и параметры сценариев:

powershell как передать параметр в скрипт

В теле функции это выглядит так:

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

Дополнительные атрибуты параметров

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

Помимо приведения типов можно использовать атрибут [parameter()]:

С его помощью нетрудно сделать параметр обязательным. Обратите внимание на одновременное использование нескольких атрибутов — в этом случае они идут друг за другом:

powershell как передать параметр в скрипт

Position позволяет указать порядок следования параметра (по умолчанию он соответствует порядку объявления):

У атрибута [Parameter()] есть и другие аргументы, полный список которых доступен на сайте Microsoft. Там же описаны прочие атрибуты, с помощью которых можно провести валидацию переданных значений, проверить их с использованием регулярных выражений и т.д. Перечислим некоторые:

[Alias()] устанавливает псевдоним для параметра:

Оператор приведения типов [string[]] означает, что значение параметра — строковый массив.

[AllowEmptyString()] разрешает пустую строку в качестве обязательного параметра:

[AllowEmptyCollection()] разрешает пустой массив в качестве обязательного параметра:

[ValidatePattern()] проверка с использованием регулярного выражения:

[ValidateLength()] проверяет длину строкового параметра:

Передача параметров через конвейер

В первой статье цикла мы рассказывали о возможности передачи данных в командлеты через конвейер (pipeline). В PowerShell командлеты и функции возвращают объекты или массивы объектов (результаты стейтментов), а также получают их на входе. По сути конвейер сам является объектом, для работы с которым программисту придется приложить определенные усилия. Чтобы это увидеть, препарируем один из командлетов при помощи Get-Help:

powershell как передать параметр в скрипт

ValueFromPipelineByPropertyName обычно используют при необходимости передать несколько параметров, чтобы не возникало путаницы, при этом аргумент можно применять одновременно с ValueFromPipeline:

powershell как передать параметр в скрипт

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

Структура тела функции

В языке PowerShell функция может включать три необязательных блока заключенного в операторные скобки кода — Begin, Process и End. Выглядит она примерно так:

powershell как передать параметр в скрипт

Атрибут [CmdletBinding()] и расширенные функции

Параметр -Force применяется для подавления запросов на проведение различных операций;

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

powershell как передать параметр в скрипт

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

powershell как передать параметр в скрипт

Low — функция незначительно воздействует на систему и не создает существенных рисков потери данных.

Medium — среднее воздействие с незначительным риском потери данных в результате деструктивных действий.

High — код создает высокий риск потери данных в результате деструктивных действий.

Модули сценариев и создание командлетов

Стандартный набор выглядит примерно так:

C:\Users\%UserName%\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\System32\WindowsPowerShell\v1.0\Modules

powershell как передать параметр в скрипт

В этой статье мы достаточно подробно разобрали передачу параметров в функции и скрипты. Следующая часть цикла будет посвящена объектно-ориентированному программированию.

Часть 1: основные возможности Windows PowerShell
Часть 2: введение в язык программирования Windows PowerShell

Источник

Что такое Windows PowerShell и с чем его едят? Часть 3: передача параметров в скрипты и функции, создание командлетов

powershell как передать параметр в скрипт

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

Оглавление:

Позиционные параметры

powershell как передать параметр в скрипт

В функциях позиционные параметры используются аналогично:

Print-Args «Ноль» «Один»

powershell как передать параметр в скрипт

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

Блок Param()

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

Корпорация Microsoft рекомендует использовать блок Param() — этот синтаксис более универсален и позволяет задавать не только аргументы функций, но и параметры сценариев:

powershell как передать параметр в скрипт

В теле функции это выглядит так:

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

Дополнительные атрибуты параметров

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

Помимо приведения типов можно использовать атрибут [parameter()]:

С его помощью нетрудно сделать параметр обязательным. Обратите внимание на одновременное использование нескольких атрибутов — в этом случае они идут друг за другом:

powershell как передать параметр в скрипт

Position позволяет указать порядок следования параметра (по умолчанию он соответствует порядку объявления):

У атрибута [Parameter()] есть и другие аргументы, полный список которых доступен на сайте Microsoft. Там же описаны прочие атрибуты, с помощью которых можно провести валидацию переданных значений, проверить их с использованием регулярных выражений и т.д. Перечислим некоторые:

[Alias()] устанавливает псевдоним для параметра:

Оператор приведения типов [string[]] означает, что значение параметра — строковый массив.

[AllowEmptyString()] разрешает пустую строку в качестве обязательного параметра:

[AllowEmptyCollection()] разрешает пустой массив в качестве обязательного параметра:

[ValidatePattern()] проверка с использованием регулярного выражения:

[ValidateLength()] проверяет длину строкового параметра:

Передача параметров через конвейер

В первой статье цикла мы рассказывали о возможности передачи данных в командлеты через конвейер (pipeline). В PowerShell командлеты и функции возвращают объекты или массивы объектов (результаты стейтментов), а также получают их на входе. Чтобы это увидеть, препарируем один из командлетов при помощи Get-Help:

powershell как передать параметр в скрипт

ValueFromPipelineByPropertyName обычно используют при необходимости передать несколько параметров, чтобы не возникало путаницы, при этом аргумент можно применять одновременно с ValueFromPipeline:

powershell как передать параметр в скрипт

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

Структура тела функции

В языке PowerShell функция может включать три необязательных блока заключенного в операторные скобки кода — Begin, Process и End. Выглядит она примерно так:

powershell как передать параметр в скрипт

Атрибут [CmdletBinding()] и расширенные функции

Параметр -Force применяется для подавления запросов на проведение различных операций;

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

powershell как передать параметр в скрипт

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

powershell как передать параметр в скрипт

Low — функция незначительно воздействует на систему и не создает существенных рисков потери данных.

Medium — среднее воздействие с незначительным риском потери данных в результате деструктивных действий.

High — код создает высокий риск потери данных в результате деструктивных действий.

Модули сценариев и создание командлетов

Стандартный набор выглядит примерно так:

C:\Users\%UserName%\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\System32\WindowsPowerShell\v1.0\Modules

powershell как передать параметр в скрипт

В этой статье мы достаточно подробно разобрали передачу параметров в функции и скрипты. Следующая часть цикла будет посвящена объектно-ориентированному программированию.

Источник

Как передать необходимые параметры скрипту в Powershell ISE?

Я указал необходимые параметры в голове скрипта:

когда я хочу отладить скрипт с помощью Powershell ISE: как я могу заполнить эти параметры?

4 ответов:

панель команд. Откройте файл сценария в Редакторе ISE, установите точки останова (F9). Затем в области команд введите команду, вызывающую этот скрипт с требуемыми параметрами. Я не думаю, что есть другой (встроенный) способ сделать это в Исэ.

powershell как передать параметр в скрипт

так что для вашего примера,

вы бы выполнили что-то вроде этого на ISE Подсказка:

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

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

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

существует гораздо более простой способ установить необходимые параметры в ISE:

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *