这一篇咱们来说一下参数的互斥,何谓参数互斥呢.用九胖风格的话说就是互怼,有我没你,有你没我.ide
例如咱们为一个Ping功能Function设定了两个参数,一个叫ComputerName,一个叫IPAddress.若是你不使用参数互斥,那么使用的时候有可能会出现又指定ComputerName又指定IPAddress的状况.那究竟是Ping计算机名仍是IP地址呢?正确使用了参数互斥:ParameterSetName就能够很好的解决问题.3d
目标blog
输入姓名和年龄后,直接在显示 某某 今年 多少 岁 .ci
强制要求输入ChineseName或EnglishName.get
ChineseName或EnglishName互斥.两者只能选其一.it
示例:io
Function Test-Function {Param ( [parameter( Mandatory = $true, ParameterSetName = "ChineseName")]$ChineseName, [parameter( Mandatory = $true, ParameterSetName = "EnglishName")]$EnglishName, [parameter( Position = 0 )]$Age = "18") Write-Host "$ChineseName$EnglishName 今年 $Age 岁." }
说明:class
与上篇文章中相比,把单一的Name参数修改为了ChineseName与EnglishName,而且分别设置了ParameterSetName.扩展
由于此例中位置参数Position = 0不能同时给两个参数,因此暂时去掉.将第1个位置给了Age,这样咱们在输入名字之后仍是能够省掉输入"-Age".im
最后在Write-Host的位置,我将$ChineseName$EnglishName写在了一块儿,由于他们之间互斥,确定会有一个为空,那么实际显示的时候就只会显示其中一个参数的值.因此没必要纠结这样的写法.
注意:
1.ParameterSetName能够设置成任何字符,但当你使用了其中某一个ParameterSetName的参数时,只有相同的ParameterSetName的参数或是没有设置ParameterSetName的参数(至关因而共用的参数)可使用,其余的ParameterSetName的参数就会被互斥给排除掉.
2.当两个ParameterSetName的参数都被设定为强制(Mandatory)时,不会由于互斥而报错.
运行结果:
上图咱们也能够看到互斥之后的效果.咱们在使用了-EnglishName以后-ChineseName的参数就不会在自动提示中显示了,那也就是表明说ChineseName参数被互斥之后再也不适用于当前这条命令了.
接下来咱们再运行一下代码.我使用ChineseName和EnglishName都可以正确的显示.
看过了这个例子以后能够了解到,参数互斥:ParameterSetName在实际状况下能够避免咱们在不当心或不知道的状况下同时输入了两个本不该该同时出现的参数值,大大的减小输入的错误.
扩展一下,ParameterSetName容许多个参数使用同一个值例如"A",这时全部ParameterSetName为"A"的是一组参数,当使用了"A"里的一个参数时,全部同为"A"的参数仍然被保留下来可使用.但若是另外使用了一个"B"的参数时,那么"A"这一组的参数会被所有排除变成不可以使用的参数了.
从下篇开始,咱们将继续为Function增长接受从管道"|"传值的功能.由于这个功能比较重要,内容会稍多一些,大概会有3个小节.