探索PowerShell(十一)函數(shù)介紹
更新時間:2012年12月05日 17:36:04 作者:
通常,代碼塊就是指函數(shù),調用函數(shù),就是執(zhí)行不同的代碼塊,以便實現(xiàn)各種功能
一個腳本的功能可能有很多,但是并非都是通過一段代碼來完成的。在一個出色的腳本中,實現(xiàn)各個功能代碼的獨立性,可以保證這個腳本具有高可用性和易維護性,并且當我們改進或刪減功能時只需刪除對應的代碼塊即可。通常,代碼塊就是指函數(shù),調用函數(shù),就是執(zhí)行不同的代碼塊,以便實現(xiàn)各種功能。
先看一個例子:
function Time {Get-Date} <enter>
這樣,我們就有了一個新函數(shù)"Time",其功能實現(xiàn)代碼就是"{Get-Date}"。
嘗試調用它:

與編程語言一樣,自定義函數(shù)同樣可以聲明參數(shù):
function(關鍵字) 函數(shù)名 (參數(shù)) {代碼}
例如:
function add ($x,$y)
{
$n = $x + $y
“$x+$y=$n”
}
運行結果:

在上例這個add函數(shù)中,如果參數(shù)為空,則不會產(chǎn)生運算。并且,在上例中的變量$n僅對函數(shù)內部有效,在函數(shù)之外,是不存在此變量的,也就是說,$n是一個局部變量。
上面的代碼還可以用另一種方法來實現(xiàn):
function add
{
param ($x,$y)
$n = $x + $y
“$x+$y=$n”
}
其中,"param"的作用是聲明參數(shù)。
大多數(shù)函數(shù)對于參數(shù)的數(shù)據(jù)類型都是有要求的,例如上列示例,如果要求函數(shù)實現(xiàn)運算功能,則要求參數(shù)使用數(shù)字類型,如果要求的功能是字符串相加,則要求為字符類型。這就要求在編寫函數(shù)時,聲明參數(shù)的同時聲明其數(shù)據(jù)類型,最好也賦予其默認值,這樣在調用時才不會發(fā)生錯誤,其實很多錯誤可能已經(jīng)發(fā)生但是我們卻看不到,因為不一定所有的函數(shù)都有輸出,可能只是將結果進行傳遞,這樣,將會給排錯帶來很大困難。
例:
function add
{
param ([int]$x=0,[int]$y=0)
$n = $x + $y
"$x+$y=$n"
}
那么,通過前面教程的內容,可以知道,很多功能的實現(xiàn)并不是通過簡單的參數(shù)傳遞,而是使用了管道符"|",那么,如何讓我們的函數(shù)也支持管道符功能呢?
只需在函數(shù)中需要接受數(shù)據(jù)的地方使用"$input"變量即可。如下例所示:
function FindWindowsFolder
{
$input | where-object {$_.Name -eq "Windows"}
}
使用如下語句調用:
ls -path c:\ | FindWindowsFolder <enter>
運行結果:

函數(shù)的階段處理
在函數(shù)中,還可以進一步分為下列3個處理步驟:
1. begin - 只在函數(shù)第一次開始時執(zhí)行一次,適用于放置初始化函數(shù)的代碼。
2. process - 每一次調用函數(shù)時都執(zhí)行
3. end - 只在函數(shù)結束時執(zhí)行一次
并不是所有的函數(shù)都需要這三個步驟,但是一旦選擇使用這種函數(shù)表達格式,在這三個代碼塊之外不能再存在其他代碼,并且,每個代碼塊只能出現(xiàn)一次。
一個典型的例子:
function fun{
begin{
"Start"
$i=1
}
process{
"run "+$i
$_.name
$i++
}
end{
"End"
}
}
ls | fun
運行結果:
先看一個例子:
復制代碼 代碼如下:
function Time {Get-Date} <enter>
這樣,我們就有了一個新函數(shù)"Time",其功能實現(xiàn)代碼就是"{Get-Date}"。
嘗試調用它:

與編程語言一樣,自定義函數(shù)同樣可以聲明參數(shù):
function(關鍵字) 函數(shù)名 (參數(shù)) {代碼}
例如:
復制代碼 代碼如下:
function add ($x,$y)
{
$n = $x + $y
“$x+$y=$n”
}
運行結果:

在上例這個add函數(shù)中,如果參數(shù)為空,則不會產(chǎn)生運算。并且,在上例中的變量$n僅對函數(shù)內部有效,在函數(shù)之外,是不存在此變量的,也就是說,$n是一個局部變量。
上面的代碼還可以用另一種方法來實現(xiàn):
復制代碼 代碼如下:
function add
{
param ($x,$y)
$n = $x + $y
“$x+$y=$n”
}
其中,"param"的作用是聲明參數(shù)。
大多數(shù)函數(shù)對于參數(shù)的數(shù)據(jù)類型都是有要求的,例如上列示例,如果要求函數(shù)實現(xiàn)運算功能,則要求參數(shù)使用數(shù)字類型,如果要求的功能是字符串相加,則要求為字符類型。這就要求在編寫函數(shù)時,聲明參數(shù)的同時聲明其數(shù)據(jù)類型,最好也賦予其默認值,這樣在調用時才不會發(fā)生錯誤,其實很多錯誤可能已經(jīng)發(fā)生但是我們卻看不到,因為不一定所有的函數(shù)都有輸出,可能只是將結果進行傳遞,這樣,將會給排錯帶來很大困難。
例:
復制代碼 代碼如下:
function add
{
param ([int]$x=0,[int]$y=0)
$n = $x + $y
"$x+$y=$n"
}
那么,通過前面教程的內容,可以知道,很多功能的實現(xiàn)并不是通過簡單的參數(shù)傳遞,而是使用了管道符"|",那么,如何讓我們的函數(shù)也支持管道符功能呢?
只需在函數(shù)中需要接受數(shù)據(jù)的地方使用"$input"變量即可。如下例所示:
復制代碼 代碼如下:
function FindWindowsFolder
{
$input | where-object {$_.Name -eq "Windows"}
}
使用如下語句調用:
ls -path c:\ | FindWindowsFolder <enter>
運行結果:

函數(shù)的階段處理
在函數(shù)中,還可以進一步分為下列3個處理步驟:
1. begin - 只在函數(shù)第一次開始時執(zhí)行一次,適用于放置初始化函數(shù)的代碼。
2. process - 每一次調用函數(shù)時都執(zhí)行
3. end - 只在函數(shù)結束時執(zhí)行一次
并不是所有的函數(shù)都需要這三個步驟,但是一旦選擇使用這種函數(shù)表達格式,在這三個代碼塊之外不能再存在其他代碼,并且,每個代碼塊只能出現(xiàn)一次。
一個典型的例子:
復制代碼 代碼如下:
function fun{
begin{
"Start"
$i=1
}
process{
"run "+$i
$_.name
$i++
}
end{
"End"
}
}
ls | fun
運行結果:

相關文章
PowerShell中使用Like運算符配合通配符查找字符串例子
這篇文章主要介紹了PowerShell中使用Like運算符配合通配符查找字符串例子,Like的返值為TRUE和FALSE,需要的朋友可以參考下2014-08-08PowerShell腳本清理指定天數(shù)前的臨時文件夾實現(xiàn)代碼
這篇文章主要介紹了PowerShell腳本清理指定天數(shù)前的臨時文件夾實現(xiàn)代碼,指定天數(shù)可以任意修改數(shù)字實現(xiàn),需要的朋友可以參考下2014-08-08PowerShell腳本 隨機密碼生成器(ps隨機密碼生成器)
這篇文章主要介紹了PowerShell腳本 隨機密碼生成器,需要的朋友可以參考下2017-10-10