从零开始学PowerShell(7)编写一个函数体
我們已經熟悉了不少PowerShell命令并且學會了通過Get-Help幫助命令自尋去挖掘一個新命令的使用方法,今天是時候可以來講下如何重用命令了。
在PowerShell控制臺中,如果我們要重用之前的命令只需要通過鍵盤方向鍵上下翻動就可以了,但這不是今天我要說的內容,畢竟當命令的代碼行數越來越多,越來越復雜時創建一個PowerShell函數最合適不過了,在編程里什么是函數呢,你可以簡單的理解為把你想做的一切包裹在一個東西里,需要的時候去調用它,它就會執行你想要做的那些事。
先來看下定義一個最簡單的PowerShell函數體,只需安裝這樣的格式編寫。
function <函數名稱> {代碼邏輯塊 }按照上面定義函數的語法格式創建我們自己的函數體,修改我們自己的函數名稱和添加想要讓這個函數執行的代碼邏輯塊寫成下面這樣。
function letspowershell {"This is our frist function." }創建一個簡單的函數自然很簡單,那調用函數也不會太難,直接需要的時候呼叫這個函數名就可以了。
無論你調用多少次它都會義無反顧的執行你設定的內容,在這個簡單的例子里我們讓這個函數顯示出了一句話。但是這樣的函數多少也有些功能簡單,所以我們要為它添加一些參數,參數的作用就像是函數體內部的變量外部的變量傳值的橋梁,如果你曾經沒有任何其它語言編程經驗,那可能會少許有些困惑,沒關系直接看例子就能理解。
function letspowershell($guest) {"This is our first function, $guest" }給一個函數體定義參數只需要在函數名后面添加一個圓括號,在圓括號里寫入你定義的參數即可,如我們之前所說這個參數起到的是傳遞數據的橋梁作用,所以調用函數的時候只需要配合參數-guest和你想要傳入的參數值就可以了,甚至也可以省略參數名稱。
除了以上這樣定義參數,還有一種格式也可以達到相同的效果,就是使用param關鍵字。
function letspowershell {param ($guest)"This is our first function, $guest" }在函數內部使用param關鍵字意味著你聲明了一個函數參數,可以看到和之前在函數名后面直接定義參數效果是一樣的。
到這里,有人或許會提問既然PowerShell的函數可以像一個命令一樣反復被執行,而PowerShell的命令又是可以通過管道之間來回傳遞數據,那么函數體是否可以與管道配合使用呢?答案自然是肯定的。
如果我們直接使用下面的方法去測試管道功能傳值,會發現并沒有成功把值傳入進去。
我們需要稍作修改,像下面這樣。?
function letspowershell {foreach ($i in $input){"This is our first function, $i"} }這里我們引入了foreach循環語句,它可以用來遍歷一個循環體,這里的$intput是PowerShell內置的以數組類型存在的自變量。所以當我們在管道符前面傳入我們的參數值后,管道符會把前面的值傳遞進$input變量里,之后進入函數體內的代碼邏輯塊開始執行。
但是上面的方法畢竟還是看起來有些怪怪的。
有疑問,是好事。有疑問才代表你在思考問題。很幸運,在PowerShell中有專門的方式通過管道傳遞參數對象給函數。這里我們要引出三個功能關鍵字begin,process,end。先來看看這三個功能關鍵字的作用。
- Begin: 使用這個關鍵字后的語句列表塊只會運行一次,而且它必須位于函數的開頭定義。
- Process: 使用這個關鍵字后的語句列表塊會針對管道傳遞過來的每個對象運行一次,并且會自動賦予$_變量。
- End: 在處理完所有的對象以后,才會運行一次End關鍵字后的語句列表塊,假如我們在函數體內沒有使用任何以上三種功能關鍵字,那么函數體默認將管道傳遞來的對象視為End方式。
還是通過幾個例子來好好理解吧。這里我們創建了一個函數體,把管道傳遞來的對象以$_自變量輸出出來(你應該記得,我們在早前的某篇文章里提到過$_,$_可以理解為是指從當前的管道傳遞過來的對象)
# 定義函數 function letspowershell {begin {"This is Begin, $_"}process {"This is Process, $_"}end {"This is End, $_"} }# 調用函數 PS /> "a","b","c" | letspowershell This is Begin This is Process, a This is Process, b This is Process, c This is End, c如上,因為當Begin運行時,函數還沒有從管道接收到對象數據,所以沒有輸出我們的參數值信息,而到了Process部分會循環多次運行管道傳遞來的每個對象數據,所以輸出了多條信息。到了End部分只有最后的一個對象運行了一次。
如果沒有使用Begin與Process關鍵字,函數默認只使用End關鍵字,并且End關鍵字也是只運行一次。
# 定義函數 function letspowershell {end {"This is End, $input"} }# 調用函數 PS /> "a","b","c" | letspowershell This is End, a b c到此,我們也差不多說完了如何編寫一個PowerShell函數體,創建一個函數其實還有許許多多可講的地方,比如定義強類型參數,位置參數,開關參數,設置函數作用域等等,相信等你慢慢對PowerShell深入后,自然而然會出現對應的需求并知道怎么去使用它們。
總結
以上是生活随笔為你收集整理的从零开始学PowerShell(7)编写一个函数体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask 文件上传
- 下一篇: 前端学习---html基础知识