PowerShell-自定義函數(五)-參數互斥:ParameterSetName

這一篇咱們來說一下參數的互斥,何謂參數互斥呢.用九胖風格的話說就是互懟,有我沒你,有你沒我.ide

例如咱們爲一個Ping功能Function設定了兩個參數,一個叫ComputerName,一個叫IPAddress.若是你不使用參數互斥,那麼使用的時候有可能會出現又指定ComputerName又指定IPAddress的狀況.那究竟是Ping計算機名仍是IP地址呢?正確使用了參數互斥:ParameterSetName就能夠很好的解決問題.3d

 

目標blog

  1. 輸入姓名和年齡後,直接在顯示 某某 今年 多少 歲 .ci

  2. 強制要求輸入ChineseName或EnglishName.get

  3. ChineseName或EnglishName互斥.兩者只能選其一.it

 

示例:io

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

 

說明:class

  1. 與上篇文章中相比,把單一的Name參數修改爲了ChineseName與EnglishName,而且分別設置了ParameterSetName.擴展

  2. 由於此例中位置參數Position = 0不能同時給兩個參數,因此暫時去掉.將第1個位置給了Age,這樣咱們在輸入名字之後仍是能夠省掉輸入"-Age".im

  3. 最後在Write-Host的位置,我將$ChineseName$EnglishName寫在了一塊兒,由於他們之間互斥,確定會有一個爲空,那麼實際顯示的時候就只會顯示其中一個參數的值.因此沒必要糾結這樣的寫法.

 

注意:

1.ParameterSetName能夠設置成任何字符,但當你使用了其中某一個ParameterSetName的參數時,只有相同的ParameterSetName的參數或是沒有設置ParameterSetName的參數(至關因而共用的參數)可使用,其餘的ParameterSetName的參數就會被互斥給排除掉.

2.當兩個ParameterSetName的參數都被設定爲強制(Mandatory)時,不會由於互斥而報錯.

 

運行結果:

p_w_picpath

上圖咱們也能夠看到互斥之後的效果.咱們在使用了-EnglishName以後-ChineseName的參數就不會在自動提示中顯示了,那也就是表明說ChineseName參數被互斥之後再也不適用於當前這條命令了.

接下來咱們再運行一下代碼.我使用ChineseName和EnglishName都可以正確的顯示.

p_w_picpath

 

看過了這個例子以後能夠了解到,參數互斥:ParameterSetName在實際狀況下能夠避免咱們在不當心或不知道的狀況下同時輸入了兩個本不該該同時出現的參數值,大大的減小輸入的錯誤.

擴展一下,ParameterSetName容許多個參數使用同一個值例如"A",這時全部ParameterSetName爲"A"的是一組參數,當使用了"A"裏的一個參數時,全部同爲"A"的參數仍然被保留下來可使用.但若是另外使用了一個"B"的參數時,那麼"A"這一組的參數會被所有排除變成不可以使用的參數了.

 

從下篇開始,咱們將繼續爲Function增長接受從管道"|"傳值的功能.由於這個功能比較重要,內容會稍多一些,大概會有3個小節.

相關文章
相關標籤/搜索