对参数的powershell约束

时间:2011-03-23 11:43:34

标签: powershell

我需要一些帮助来了解如何对powershell脚本的参数强制执行以下约束。我可以在param部分中指定这些约束。

  1. 至少一个参数约束
  2. 最多一个参数约束
  3. 例如,(只是一个例子,它不是我正在做的)到一个名为ReadPlainText.ps1的脚本,我只想给出两个参数中的任何一个:Lines或{{1} },但不是两者。命令Chars应该导致错误。同样,命令ReadPlainText.ps1 Sample.txt -Lines 20 -Chars 10也会导致错误。

2 个答案:

答案 0 :(得分:6)

您可以在PSH V2中执行此操作,参数属性并将两个参数放入不同的参数集中。

参数集是一组参数,一个命令可以有多个参数集,只有一个可用。所有参数都可以使用未分配给参数组的参数。这可以在标准cmdlet中看到(删除常用参数):

PS> gcm -syn get-content

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

要在脚本或函数中实现此目的:

  • 添加[CmdletBinding]作为第一个非评论。 (可在此处指定默认参数集。)
  • 在具有param属性的Parameterdecorate parameters中指定必填项和参数集。

因此:

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

访问使用$PSCmdlet中的参数集,该参数集允许访问在C#或VB编写的cmdlet中可用的相同信息。

答案 1 :(得分:2)

此示例(Source: PowerShell Script – Marking a parameter as required/optional)可能对您有帮助......

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  
      )