ограничения powershell на аргументы - PullRequest
4 голосов
/ 23 марта 2011

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

  1. Как минимум одно ограничение аргумента
  2. Не более одного аргумента ограничение

Например, (просто пример, это не то, что я делаю) для скрипта с именем ReadPlainText.ps1, я хотел бы дать только один из двух аргументов: Lines или Chars, но не оба. Команда ReadPlainText.ps1 Sample.txt -Lines 20 -Chars 10 должна привести к ошибке. Аналогично, команда ReadPlainText.ps1 Sample.txt должна привести к ошибке.

Ответы [ 2 ]

6 голосов
/ 23 марта 2011

В PSH V2 вы можете сделать это с помощью атрибутов параметров, поместив два параметра в разные наборы параметров.

Набор параметров - это группа параметров, которые объединяются, команда может иметь несколько наборов параметров, и доступен только один. Параметры, не назначенные группе параметров, доступны для всех параметров. Это можно увидеть в стандартных командлетах (без общих параметров):

PS> gcm -syn get-content

Get-Content [-Path]  …
Get-Content [-LiteralPath]  …

Чтобы добиться этого в скрипте или функции:

  • Добавьте [CmdletBinding] в качестве первого комментария. (Здесь можно указать набор параметров по умолчанию.)
  • В блоке param декорировать параметры с атрибутом Parameter, чтобы указать обязательный параметр и набор параметров.

Таким образом:

[CmdletBinding]
param (
  [parameter(mandatory=$true,ParameterSetName='lines')
  [int]$Lines,
  [parameter(mandatory=$true,ParameterSetName='chars')
  [int]$|Chars
)

Для доступа к используемому набору параметров $PSCmdlet, который дает доступ к той же информации, доступной в командлетах, написанных на C # или VB.

2 голосов
/ 23 марта 2011

Этот пример ( Источник: PowerShell Script - пометка параметра как обязательного / необязательного ) может помочь вам ...

param(
      [string] $param1 = $(throw "required param"), #throw exception if no value provided.
      [string] $param2, #an optional parameter with no default value.
      [string] $param3 = "default value", #an optional parameter with a default value.
      [string] $param4 = $(Read-Host -prompt "param4 value"), #prompt user for value if none provided.
      [string] $param5 = $( if($thisinput -eq "somevalue") { "defaultvalue1" } else { "defaultvalue2" } ) #conditional default value  
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...