函數用法


與其他語言一樣,powershell也存在自己的函數,這節主要介紹一些函數的用法。


1、定義一個函數

function add      #add是函數名
{
    param(        #函數內部包含的變量,[int]表示定義的變量只能是整型
        [int]$a,
        [int]$b
    )
    echo "$a + $b"    #函數體,具體執行的代碼
}
PS C:\> add 2 3        #調用函數,2  3 是傳入add函數的兩個變量,若傳入的變量不是整型會報錯
2 + 3

PS C:\> add 2
2 + 0

PS C:\> add          #整型變量不足兩個變量默認是0,字符型變量默認是“”
0 + 0

PS C:\> add 1 2 3
1 + 21

【補充】

  為powershell腳本設置參數變量

編寫一個a.ps1的腳本,內容如下

 

為腳本傳入參數,命令行可以識別到ps1腳本中的參數名。

 

 【補充】使用另一個腳本中定義的函數

若a.ps1腳本中定義了兩個函數  

  

在其他腳本中調用a.ps1腳本中的函數:

. "腳本路徑"      #調用方法

  

2、函數的返回值

  powershell中的函數可以有多個返回值,並且可以不用return返回,每一條輸出都是一個返回值。但是一旦使用return后續的代碼將不會執行。

 

function duo
{
    $a=1
    $b=2
    echo $a
    echo $b
    echo "123"
    return "xyz"

}

 

  函數duo中,可以看出,輸出了3個值,並使用return返回了一個值,此時該函數將會有4個返回值,以數組形式返回,在調用時可以:

$a,$b,$c,$d = duo

  若要取出特定的某個值,可以:

$a = duo
echo $a[2]

        當函數只有一個返回值時,返回的是一個值,若有多個返回值時,返回一個數組。

function a([int] $x)
{
    "$x"
    "$x + $x"
    "$x * $x"
}
PS C:\> $b = a 2

PS C:\> $b
2
2 + 2
2 * 2

PS C:\> $b[1]
2 + 2

PS C:\> $b -is [array]
True

 3、限定傳入參數個數

  函數中傳入的參數可以提前設定好值,這個方法是ValidateSet,可以理解成枚舉。

function meiju 
{
    param(
        [ValidateSet('a','b','c')]      #設定$n的取值范圍是“a”,“b”,“c”其中之一
        $n  
    )
    echo "$n"
}
PS C:\> meiju b    #傳入的值是“abc”其中之一
b

  若傳入abc以外的值會報錯:

4、限定傳入參數的個數

  powershell的函數中給出了一個限定傳入參數個數的方法,ValidateCount,可以設定傳入值得個數。

function num
{
    param(
        [ValidateCount(1,3)]    #限定允許傳入的值是1-3個,不符合要求報錯
        [string[]]          #聲名$a是一個字符串數組
        $a
    )
    echo $a
}
PS C:\> num 1,2,3    #num函數接收一個數組,數組的長度是3
1  
2
3

  若數組的長度大於3,則報錯

5、萬能變量

  一般的,我們在設定變量時候會提前聲名變量的類型,字符型、整型、日期型......,若不聲明可以接受整型也可以接受字符型,但是如果我們不知道有多少個變量要傳入可以用$args,它是一個萬能的變量,不限傳入的個數,也不限定類型,也可以省略定義。

function all
{
    foreach($i in $args)
    {
        echo $i
    }
}
PS C:\> all 1
1

PS C:\> all 'abc'
abc

PS C:\> all 'abc' 123 '1q2w' 4.12p
abc
123
1q2w
4.12p

6、隱藏輸入的密碼

  在Parameter這個限制語句之前加了一句“[System.Security.SecureString]”,這個修飾語句用於將輸入參數設置為安全字符串類型,這樣輸入這個參數的值時,就會變成星號了

function secret
{
    param(
        [System.Security.SecureString]
        [parameter(mandatory=$true)]
        $passwd
    )

    $mima = (New-Object System.Management.Automation.PSCredential("ticp",$passwd)).GetNetworkCredential().Password
    echo $mima
}

  

 7、函數的開關

  我們在使用ping命令時候,通常會用到一個-t的參數,這個參數的作用是一直ping,若不跟這個參數只ping4次,作用相當於開關。下面的小例子就實現了剛才的功能

	function p
	{
	    param(
	        [switch]  #開關參數
	        $t
	    )
	
	    if($t)
	    {
	        echo "......"
	    }
	    else
	    {
	        echo "4"
	    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM