转自: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. VS项目发布到本地IIS

    一.项目介绍 ①web项目,开发工具Visual Studio,语言C# ②本地IIS,手机上或其他用户在和本地在同一个局域网(并不绝对是指同一个WIFI)内访问,同时要把防火墙关掉 ③IIS全名In ...

  2. C# 1-2+3-4+5...+m的几种方法

    class Program { //第一种(1-2)+(3-4)+(5-6)...+m public static void Test(int m) { ; == ) { z = -(m / ); } ...

  3. Mysql is null 索引

    看到很多网上谈优化mysql的文章,发现很多在谈到mysql的null是不走索引的,在此我觉得很有必要纠正下这类结论.mysql is null是有索引的,而且是很高效的,(版本:mysql5.5)表 ...

  4. Django学习之四:Django Model模块

    目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...

  5. APIO 2018游记

    并不是很想写游记 在考场上做了四个小时的T1T2,T3没开 出考场听zrz讲T3的时候差点气死 难度顺序为1 > 2 > 3什么鬼 不过最后还是出乎意料的混到了一块铜牌 两天的培训好评(虽 ...

  6. JS、CSS中的相对路径

    css中url(../images/1.jpg)路径是相对于index.css的 js中url(images/1.jpg)路径是相对于index.html的,并不是相对于index.js

  7. Dynamics 365-ExecuteWorkflowRequest

    一般是通过对CRM上的数据进行手动操作,来触发Workflow,但是如果碰到数据量比较大的时候,纯手动操作无疑是一个耗时费力的事.这个时候,可以通过使用ExecuteWorkflowRequest来实 ...

  8. 38.Odoo产品分析 (四) – 工具板块(7) – 车队管理(2)

    查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (四) – 工具板块(7) – 车队管理(1) 4 显示及状态说明 合同默认以列表视图显示:  当合约到期时,以红色显示,并显示状态为待关闭 ...

  9. 建立第一个SpringBoot小列子(碰到的错误)

    当加入@SpringBootApplication注解时,无法得到解析 错误提示:SpringBootApplication cannot be resolved to a type 错误原因是因为s ...

  10. 批处理基础知识-IF

    本文主要介绍批处理IF命令的使用. IF命令格式: if /i string=string command 释义:判断2个字符串是否相等,但不区分大小写. 例: 代码: @echo off if /i ...