转自:https://blog.51cto.com/38088444/1920978

这一篇我们来讲一下参数的互斥,何谓参数互斥呢.用九胖风格的话说就是互怼,有我没你,有你没我.

例如我们为一个Ping功能Function设定了两个参数,一个叫ComputerName,一个叫IPAddress.如果你不使用参数互斥,那么使用的时候有可能会出现又指定ComputerName又指定IPAddress的情况.那到底是Ping计算机名还是IP地址呢?正确使用了参数互斥:ParameterSetName就可以很好的解决问题.

目标

  1. 输入姓名和年龄后,直接在显示 某某 今年 多少 岁 .

  2. 强制要求输入ChineseName或EnglishName.

  3. ChineseName或EnglishName互斥.二者只能选其一.

示例:

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 岁." }

说明:

  1. 与上篇文章中相比,把单一的Name参数修改成了ChineseName与EnglishName,并且分别设置了ParameterSetName.

  2. 因为此例中位置参数Position = 0不能同时给两个参数,所以暂时去掉.将第1个位置给了Age,这样我们在输入名字以后还是可以省掉输入"-Age".

  3. 最后在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个小节.

PowerShell-自定义函数(五)-参数互斥:ParameterSetName的更多相关文章

  1. PowerShell自定义函数定义及调用

    PowerShell是一种命令集,也有自己的语法定义及函数.本文主要介绍如何自定义powershell函数及如何调用,当初在写PowerShell自定义函数的时候查阅了很多资料都没找到如何调用自定义函 ...

  2. php自定义函数之参数的引用

    在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识:大理石平台支架 <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'. ...

  3. Python自定义函数的参数

    在Python中自定义的函数可以有三类不同的参数 formal parameters positional arguments Keyword Arguments When a final forma ...

  4. python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  5. Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar

    解压缩后,可以看到如下3个文件. ExcelDna.IntelliSense.xll 以及 ExcelDna.IntelliSense64.xll 是两个函数参数智能提示加载项,分别用于32和64位E ...

  6. sparksql udf自定义函数中参数过多问题的解决

    在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串. 如要获取 “aaaakkkkk”中的第4-第8个字符. 针对这种需求,只有设置UDF来实现 ...

  7. JS基础(五)自定义函数

    作用:是为了让重复使用的语句,方便进行调用. 定义格式: function 自定义函数名 (参数1, 参数2,...) { 执行的语句 } 函数的封装:把语句放到函数中去的过程. 参数:通过参数的改变 ...

  8. SQL Server 自定义函数(Function)——参数默认值

    sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Functio ...

  9. 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)

    hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...

随机推荐

  1. Asp.Net路由重写为用户名或者ID

    有一个需求如下:指定某个Area的路由(Area:Wx)在其后面添加用户名或者ID作为URL参数,即像下面的样子: /Wx/xiaoming/ /Wx/xiaoming/photo /Wx/xiaom ...

  2. Java 学习笔记 线程控制

    题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...

  3. excel函数2

    1截取函数的应用 实例: 2.日期的年周月星期数据处理

  4. 关于ajax用户名验证和jquery实现简单表单验证

    首先来说用户名验证: 前台: <tr> <td class="tableleft">教师编号</td> <td><input ...

  5. 怎么使用Fiddler进行抓包

    启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框.      在Fiddler Options”对话框切换到“Co ...

  6. Valgrind.Callgrind使用

    Callgrind介绍 用来对统计程序的函数调用之间的关系, 并统计每个函数的耗时 Callgrind之所以能够发现函数调用的关系, 依赖于平台的明确返回和调用指令. 在x86和amd64平台上wor ...

  7. Android 开源框架Glide的使用

    Glide是一个快速高效的多媒体管理和图像加载的框架,封装了Android平台的多媒体的解码,内存和硬盘缓存等,Glide支持解码.显示视频.图像和GIFs,Glide是基于定制的HttpUrlCon ...

  8. 领域驱动设计(DDD:Domain-Driven Design)

    领域驱动设计(DDD:Domain-Driven Design) Eric Evans的"Domain-Driven Design领域驱动设计"简称DDD,Evans DDD是一套 ...

  9. CGI 、FastCGI、PHP-CGI、PHP-FPM 定义以及与nginx的应用关系

    CGI common gateway interface,简称cgi,简而言之就是一个接口,一种协议.它的作用就是帮助服务器与语言通信. 这里以nginx和php为例,因为nginx和php的语言不通 ...

  10. 扒一扒EOS的前世今生

    扒一扒EOS的前世今生 EOS是什么?   EOS可以认为是Enterprise Operation System的缩写,即商用的一款分布式区块链操作系统,EOS主要为了解决百万级用户的使用问题,为企 ...