PowerShell-自定义函数(五)-参数互斥:ParameterSetName

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

例如我们为一个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个小节.

时间: 2024-10-12 17:16:46

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

PHP自定义函数之参数的引用

在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识: <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'.$b; ?> 变量的引用就是把变量$a.$b的值存到同一个空间里. 而函数的参数引用,也是这个意思,将形参和实参指向到同一个位置.如果形参在函数体内发生变化,那么实参的值也发生变化.我们来通过实验来看看: $fun2=101; $fun3=&$fun2; $fun2=100; echo $fun3.$fun2

Python自定义函数的参数

在Python中自定义的函数可以有三类不同的参数 formal parameters positional arguments Keyword Arguments When a final formal parameter of the form **name is present, it receives a dictionary (see Mapping Types - dict) containing all keyword arguments except for those corre

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):print x,y 提供了默认值,调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了.上面这俩种方式,还可以更换参数位置,比如a(y=4,x=3)用这种形式也是可以的 如果是def a(x,y=3,z=4)这种函数如果只传x和z和值,则必须这样写a(1,z=2),后面

js自定义函数默认参数的写法

错误写法如下:(我以为这样写是对的,结果在很多浏览器都运行出错,只在火狐浏览器中运行正常,可能火狐浏览器兼容了这种写法). function test(a,b=0){ ...... } 正确的写法如下: function test(a,b){ if(!arguments[1]) b=0; ...... } arguments[0]表示第一个参数a arguments[1]表示第二个参数b当第二个参数b不存在时,给b赋默认值0

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

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

JS基础(五)自定义函数

作用:是为了让重复使用的语句,方便进行调用. 定义格式: function 自定义函数名 (参数1, 参数2,...) { 执行的语句 } 函数的封装:把语句放到函数中去的过程. 参数:通过参数的改变,改变函数的结果. 传参:使用参数调用函数. 在传参的过程中,是有顺序要求的,注意不能把顺序搞乱. 变量的作用域:1.全局变量:在程序中各函数都能够调用. 2.局部变量:只在定义的函数中能够调用.

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

原文:SQL Server 自定义函数(Function)--参数默认值 sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,

JavaScript进阶系列02,函数作为参数以及在数组中的应用

有时候,把函数作为参数可以让代码更简洁. var calculator = { calculate: function(x, y, fn) { return fn(x, y); } }; var sum = function(x, y) { return x + y; }, diff = function (x, y) { return x - y; }; var sumResult = calculator.calculate(2, 1, sum), diffResult = calculat

Sqlserver_自定义函数操作

use Test go if exists( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'gettime') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))-- 判断是否存在该自定义函数 drop function gettime -- 删除该自定义函数 go create function gettime(@t datetime) ---- 创建自定义函数带参数 returns