我需要一些帮助来了解如何对powershell脚本的参数强制执行以下约束。我可以在param
部分中指定这些约束。
例如,(只是一个例子,它不是我正在做的)到一个名为ReadPlainText.ps1
的脚本,我只想给出两个参数中的任何一个:Lines
或{{1} },但不是两者。命令Chars
应该导致错误。同样,命令ReadPlainText.ps1 Sample.txt -Lines 20 -Chars 10
也会导致错误。
答案 0 :(得分:6)
您可以在PSH V2中执行此操作,参数属性并将两个参数放入不同的参数集中。
参数集是一组参数,一个命令可以有多个参数集,只有一个可用。所有参数都可以使用未分配给参数组的参数。这可以在标准cmdlet中看到(删除常用参数):
PS> gcm -syn get-content Get-Content [-Path] … Get-Content [-LiteralPath] …
要在脚本或函数中实现此目的:
[CmdletBinding]
作为第一个非评论。 (可在此处指定默认参数集。)param
属性的Parameter
块decorate 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
)