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
В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.
Создание и выполнение сценариев
Политика выполнения Windows PowerShell определяет, можно ли выполнять сценарии, загружать профили Windows PowerShell и файлы конфигурации. Политика выполнения по умолчанию, Restricted, запрещает выполнение сценариев и блокирует загрузку профилей. Чтобы изменить эту политику выполнения и разрешить загрузку и использование профилей, см. описание Set-ExecutionPolicy и about_Signing.
Создание файла сценария
Открытие существующего сценария
Нажмите кнопку Открыть. на панели инструментов или откройте меню Файл и выберите пункт Открыть. В диалоговом окне Открыть выберите файл, который требуется открыть. Открытый файл появится в новой вкладке.
Закрытие вкладки сценария
На вкладке файла, которую нужно закрыть, щелкните значок закрытия (X) или откройте меню File (Файл) и выберите Close (Закрыть).
Если файл был изменен с момента последнего сохранения, будет предложено сохранить или отменить изменения.
Отображение пути к файлу
На вкладке файла наведите курсор на его имя. Появится подсказка с полным путем к файлу сценария.
Запуск сценария
Нажмите кнопку Выполнить сценарий на панели инструментов или откройте меню Файл и выберите пункт Выполнить.
Выполнение части сценария
Остановка выполняемого сценария
Есть несколько способов остановить выполняемый скрипт.
Нажатие клавиш CTRL + C также сработает, если нет выделенного текста. В противном случае нажатие клавиш CTRL + C приведет к копированию выделенного текста.
Написание и редактирование текста в области сценариев
В области скриптов текст можно копировать, вырезать, вставлять, искать и заменять. Также можно отменить и повторить последнее выполненное действие. Для этого используются те же клавиши, как и во всех других приложениях Windows.
Ввод текста в области сценариев
Поиск текста в области сценариев
Поиск и замена текста в области сценариев
Переход к определенной строке текста в области сценариев
В области сценариев нажмите клавиши CTRL + G или выберите Go to Line (Перейти к строке) в меню Edit (Правка).
Введите номер строки.
Копирование текста в области сценариев
В области сценариев выделите текст, который требуется скопировать.
Вырезание текста в области сценариев
Вставка текста в области сценариев
Отмена действия в области сценариев
Повторное выполнение действия в области сценариев
Сохранение сценария
Звездочка рядом с именем скрипта обозначает, что файл не был сохранен после изменения. После сохранения звездочка исчезает.
Сохранение сценария
Сохранение сценария с определенным именем
Сохранение сценария в кодировке ASCII
Следующая команда сохраняет новый сценарий в кодировке ASCII и с именем MyScript.ps1:
Следующая команда заменяет текущий файл сценария на файл с таким же именем, но в кодировке ASCII:
Следующая команда возвращает кодировку текущего файла:
Интегрированная среда скриптов Windows PowerShell поддерживает следующие параметры кодировки: ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8 и Default. Значение параметра Default зависит от системы.
Интегрированная среда скриптов Windows PowerShell не изменяет кодировку файлов скриптов при использовании команд «Сохранить» или «Сохранить как».
Что такое Windows PowerShell и с чем его едят? Часть 3: передача параметров в скрипты и функции, создание командлетов
Во второй части цикла рассматривались основы языка программирования PowerShell, а сейчас стоит разобраться с использованием написанного на нем кода для задач администрирования. Самый очевидный способ это сделать — запустить сценарий. Кроме него существует возможность создания собственных командлетов.
Оглавление:
Позиционные параметры
В функциях позиционные параметры используются аналогично:
Print-Args «Ноль» «Один»
Описанный выше способ позволяет передать в сценарий или функцию любое количество параметров, но при вызове необходимо соблюдать порядок их следования, а обращаться к ним можно только по индексу массива — это не всегда удобно.
Блок Param()
В сценариях и функциях намного удобнее использовать именованные параметры. В предыдущей статье мы рассказывали об одном способе их описания:
Корпорация Microsoft рекомендует использовать блок Param() — этот синтаксис более универсален и позволяет задавать не только аргументы функций, но и параметры сценариев:
В теле функции это выглядит так:
Если список аргументов функции невелик, блок Param() только загромоздит конструкцию, но во многих случаях он делает код более читаемым и является помимо прочего элементом хорошего стиля программирования.
Дополнительные атрибуты параметров
При описании аргументов функции или параметров скрипта можно задать их дополнительные атрибуты. Самый простой пример — принудительная установка типа:
Помимо приведения типов можно использовать атрибут [parameter()]:
С его помощью нетрудно сделать параметр обязательным. Обратите внимание на одновременное использование нескольких атрибутов — в этом случае они идут друг за другом:
Position позволяет указать порядок следования параметра (по умолчанию он соответствует порядку объявления):
У атрибута [Parameter()] есть и другие аргументы, полный список которых доступен на сайте Microsoft. Там же описаны прочие атрибуты, с помощью которых можно провести валидацию переданных значений, проверить их с использованием регулярных выражений и т.д. Перечислим некоторые:
[Alias()] устанавливает псевдоним для параметра:
Оператор приведения типов [string[]] означает, что значение параметра — строковый массив.
[AllowEmptyString()] разрешает пустую строку в качестве обязательного параметра:
[AllowEmptyCollection()] разрешает пустой массив в качестве обязательного параметра:
[ValidatePattern()] проверка с использованием регулярного выражения:
[ValidateLength()] проверяет длину строкового параметра:
Передача параметров через конвейер
В первой статье цикла мы рассказывали о возможности передачи данных в командлеты через конвейер (pipeline). В PowerShell командлеты и функции возвращают объекты или массивы объектов (результаты стейтментов), а также получают их на входе. Чтобы это увидеть, препарируем один из командлетов при помощи Get-Help:
ValueFromPipelineByPropertyName обычно используют при необходимости передать несколько параметров, чтобы не возникало путаницы, при этом аргумент можно применять одновременно с ValueFromPipeline:
Как видите, получать параметры через конвейер могут и скрипты, но все же практическое применение описанных выше атрибутов характерно скорее для расширенных функций, которые будут рассмотрены ниже.
Структура тела функции
В языке PowerShell функция может включать три необязательных блока заключенного в операторные скобки кода — Begin, Process и End. Выглядит она примерно так:
Атрибут [CmdletBinding()] и расширенные функции
Параметр -Force применяется для подавления запросов на проведение различных операций;
-WhatIf нужен для эмуляции запуска и отображения информации о последствиях выполнения функции (команды) без этого параметра. Обычно используется, если функция может выполнить деструктивные действия.
-Confirm требует подтверждения и также используется, если функция может выполнить деструктивные действия.
Low — функция незначительно воздействует на систему и не создает существенных рисков потери данных.
Medium — среднее воздействие с незначительным риском потери данных в результате деструктивных действий.
High — код создает высокий риск потери данных в результате деструктивных действий.
Модули сценариев и создание командлетов
Стандартный набор выглядит примерно так:
C:\Users\%UserName%\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\System32\WindowsPowerShell\v1.0\Modules
В этой статье мы достаточно подробно разобрали передачу параметров в функции и скрипты. Следующая часть цикла будет посвящена объектно-ориентированному программированию.
Запуск скриптов PowerShell
Как запустить скрипт PowerShell?
Есть несколько различных способов запуска скрипта, ниже приведены основные:
Как разрешить выполнение неподписанного скрипта PowerShell?
Оба способа устанавливают политику только для текущего сеанса, при этом, политика безопасности выполнения скриптов PowerShell, прописанная в реестре, не будет изменена и останется прежней. Если вы хотите поменять политику безопасности выполнения скриптов «на постоянно», то используйте такой способ:
3. Разрешить запуск навсегда : запустить оболочку PowerShell от имени «Администратора», затем выполните команду:
Set-ExecutionPolicy RemoteSigned
Однако, я бы не рекомендовал такой способ, чтобы не подвергать ваш компьютер возможным угрозам, т.к. так вы разрешаете выполнение скриптов всем и всегда.
Как запустить скрипт PowerShell в фоновом режиме?
Запуск скрипта PowerShell c параметрами
Собственно запуск нужно делать как если бы вы запускали обычную программу или bat-файл с параметрами. Например, для запуска скрипта с параметрами из командной, можно написать такую команду:
В самом скрипте вы можете получить эти параметры так:
В интегрированной среде PowerShell ISE запустить скрипт с параметрами можно аналогично, используя область команд.
Как запустить скрипт PowerShell с помощью ярлыка?
Осуществить такую задачу можно двумя способами:
Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.
Передача параметров в PowerShell
Иногда создаваемый вами сценарий или функция должна принять какое либо входное значение — имя компьютера, путь к папке, название сервиса и т.п. В PowerShell есть несколько способов передать данные в сценарий из командной строки, сделав их ввод более простым и эффективным.
Этот скрипт должен вывести состояние заданного сервиса\сервисов для одного или нескольких компьютеров. Имя сервиса и компьютера передаются в скрипт в качестве аргументов.
Теперь выполним его, указав в качестве аргументов сервис печати (spooler) и имя компьютера SRV1:
.\service.ps1 spooler SRV1
Более эффективным способом передачи параметров является использование в сценарии блока param. Для примера возьмем наш сценарий и изменим его:
Param (
[string]$service,
[string]$computer
)
Разбивать сценарий на строки необязательно, вполне возможно записать все в одну строку. Если блок param имеется в сценарии или функции, PowerShell сам считывает его и разделяет знаками табуляции. Поскольку имена параметров явно указаны, то их можно вводить в любом порядке, например так:
Чтобы вводить меньше текста, имена параметров можно сократить, например так:
.\service.ps1 spooler SRV1
Есть в PowerShell и более сложный способ передачи параметров, позволяющий задавать параметры как обязательные, указывать для каждого позицию и многое другое. Для примера изменим сценарий следующим образом:
Param (
[Parameter (Mandatory=$true, Position=1)]
[string]$service,
[Parameter (Mandatory=$true, Position=2)]
[string]$computer
)
Здесь оба параметра указаны как обязательные (Mandatory=$true) и для каждого задана своя позиция. Это значит, что оба параметра обязательно должны быть указаны и должны идти строго в определенном порядке. Теперь если не указать один из параметров, то PowerShell автоматически напомнит об этом и предложит ввести недостающую информацию.
Использование расширенного синтаксиса позволяет задавать различные ограничения для вводимых параметров. Еще раз изменим сценарий, указав в нем для имени компьютера ограничение в 3 символа (ValidateLength(1,3):
Param (
[Parameter (Mandatory=$true)]
[string]$service,
[Parameter (Mandatory=$true)]
[ValidateLength(1,3)]
[string]$computer
)
И теперь, если введенные значения не подходят под заданные ограничения, то сценарий не отработает. В нашем случае вот такая команда выдаст ошибку
А такая отработает нормально: