转自: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. C#數據庫

    一.連接數據庫 1.定義連接數據庫的字符串 string source = "server=(local); integrated security=SSPI; database=test& ...

  2. Android安全–检测是否为Android模拟器

    有时候需要检测是否在模拟器上运行还是在真机运行,话不多说.检测代码如下: package com.monkey.antiemulator; import java.io.File; import ja ...

  3. 通过多线程处理提高Redis性能

    Redis通常被称为单进程单线程模型. 这不是真的! Redis还运行多个后端线程来执行后端清理工作,例如清理脏数据和关闭文件描述符.在Redis中,主线程负责主要任务,包括但不限于:接收来自客户端的 ...

  4. 仿9GAG制作过程(一)

    有话要说: 准备开始学习Android应用程序的一个完整的设计过程.准备做一个仿9GAG的APP,前端界面设计+后台数据爬虫+后台接口设计,整个流程体验一遍.今天准备先把前端界面的框架给完成了. 成果 ...

  5. Android网页打开指定App

    一.只打开APP操作 通过用手机的浏览器(内置,第三方都可)访问一个网页,实现点击一个链接启动自己的应用,并传递数据. 首先在Mainifest文件里面对要启动的Activity添加一个过滤器. 网页 ...

  6. SQL Server 数据库部分常用语句小结(二)

    9. 查询备份还原数据库的进度. select command ,percent_complete ,est_time_to_go=convert(varchar,(estimated_complet ...

  7. linux内核数据结构之kfifo【转】

    1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的.缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度.例如一个进程A产 ...

  8. CADisplayLink以及定时器的使用

    第一种: 用CADisplayLink可以实现不停重绘. - (CADisplayLink *)link { if (!_link) { // 创建定时器,一秒钟调用rotation方法60次 _li ...

  9. Linux 下 C# Mono P/Invoke .so 动态链接库。

    linux 的动态链接库 libgw.so 的函数 如下: struct lbt_chan { uint32_t freq_hz; uint16_t scan_time_us; }; struct l ...

  10. ThinkPad E470笔记本电脑无声音、无线wifi功能(灰色)

    最近有同事找我看他的笔记本没有wifi,型号是ThinkPadE470 ,上网搜了下提问的挺多,写一个看看有什么帮助没 看了下笔记本wifi标志是灰色显示只有飞行模式,启用了一下热键 fn+F3 没什 ...