转自: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. 【查漏补缺】File的path、absolutePath和canonicalPath的区别

    背景 在学习Idea的插件开发时,用到了相关的VirtualFileSystem这个东西,里面的VirtualFile有一个getCanonicalPath()方法引起了我的注意,我发现我不知道-- ...

  2. 使用Canvas绘制简单的时钟控件

    Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表.动画等. 没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和F ...

  3. apply,call和bind的用法区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. JQuery显示,隐藏和淡入淡出效果

    为了把JQuery搞熟悉,看着菜鸟教程,一个一个例子打,边看边记,算是一晚上的一个小总结吧.加油,我很本但是我很勤奋啊.系统的了解它,就要花时间咯. <!DOCTYPE html> < ...

  5. 查看系统cpu性能top和多核cpu使用性能

    1.使用top查看系统当前负载情况. 在显示过程 按P会按照cpu使用率排序,按M会按照内存占用率排序. 2.多核CPU上,每个核的使用率,使用 mpstat mpstat -P ALL 1 10 - ...

  6. Arcgis for js开发之直线、圆、箭头、多边形、集结地等绘制方法

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  7. C# 动态生成word文档

    本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-->管理NuGet程序包 ...

  8. Oracle 10g 应用补丁PSU 10.2.0.5.180717

    最近测试了一下在Oracle 10g下面(单实例下面)升级.应用补丁PSU 10.2.0.5.180717,打这个补丁的主要原因是 Oracle 将于 2019年6月启用新的SCN兼容性,并且由于Bi ...

  9. 网络编程中TCP基础巩固以及Linux打开的文件过多文件句柄的总结

    1.TCP连接(短链接和长连接) 什么是TCP连接?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 当网络通信 ...

  10. Nginx+uWSGI启动Django

    在之前的几篇博客中对Django的功能做了初步实践,这里链接贴一下: Django的安装和启动 Django之--网页展示Hello World! Django之--通过MVC架构的html模板展示H ...