腳本所體現的是PowerShell的編程特性,是任務(wù)自動(dòng)化的基礎。函數是比腳本粒度更細的代碼復用單元,可以定義在命令行中或者腳本中。作用域就是變量和函數的作用范圍,是執行上下文的劃分。
函數就是命名的命令列表,與一般編程語(yǔ)言中的函數概念具有相同的范疇。函數中不但可以有簡(jiǎn)單命令,還可以有控制流程的命令,如if、while、switch等。函數可以有匿名參數或者命名參數列表。命令參數列表可以用大括號或者Param關(guān)鍵字定義。匿名函數可以使用$Args變量來(lái)訪(fǎng)問(wèn)。函數也可接收來(lái)自管道的對象作為輸入,管道對象可以通過(guò)$input變量類(lèi)訪(fǎng)問(wèn)。
在腳本中定義的函數,可以定義在#require命令和Param關(guān)鍵字之后的任何位置,但要定義在調用之前。還有,自定義的函數不會(huì )自動(dòng)運行,需要被明確調用??梢允褂胒ilter或者function定義函數,用filter關(guān)鍵字定義的函數比較簡(jiǎn)單,而使用function關(guān)鍵字定義的函數可以有更加復雜的功能。
簡(jiǎn)單函數定義示例如下:
function SayHello{ "Hello"} |
函數調用方法與使用Cmdlet方法相似,輸入SayHello,并回車(chē)。則結果為Hello。
腳本就是將一些命令存貯到文件文件中,并將該文本文件的擴展名設置為.ps1。腳本中除了可以使用常用cmdlet,控制流程的命令外,還可以定義和調用自定義函數,調用方法與調用cmdlet方法類(lèi)似。
腳本也可以有參數,既可以是命名參數也可以是匿名參數。在參數的使用上,腳本與函數非常相似。
另外,PowerShell的腳本執行策略默認不允許執行任何腳本文件,修改執行策略可執行如下命令:Set-ExecutionPolicy RemoteSigned。需要謹記的是,修改執行策略會(huì )帶來(lái)安全隱患,修改執行策略之前請三思。
簡(jiǎn)單腳本d:\greet.ps1示例如下
Param([String] somebody)function Greet([String] name){ "Hello $name" }echo "Call function Greet ..."Greet $somebody |
腳本調用方法如下:
d:\greet.ps1 "Luke"或.\greet.ps1 "Luke" |
以上腳本的執行結果是,“Hello Luke”。
按類(lèi)型分,有兩種作用域:global(全局作用域)和script(腳本作用域)。啟動(dòng)PowerShell命令行后,所有命令行命令在全局作用域中運行。而腳本上下文在script作用域中運行,運行結束后腳本中定義的變量和函數不在可見(jiàn)。這是因為在腳本中定義的變量和函數默認位于script作用域中。當然也可以顯示定義變量和函數的作用域,比如function global:fun1 (){…}。這樣以來(lái),腳本執行完之后,fun1還能夠在全局作用域中執行。
按軸關(guān)系分,可以有父作用域、本地作用域(當前作用域)和子作用域。這些不是新的作用域類(lèi)型,而是作用域之間的相對關(guān)系。子作用域還可以有子作用域,這個(gè)層次可以很深。
除了可以將腳本中的變量和函數定義在全局作用域中,還可以使用點(diǎn)".”獲取來(lái)源,將一個(gè)普通腳本在本地作用域中執行,執行完畢退出腳本后,所有在腳本中定義的變量和函數,在本地作用域中繼續可用。
使用點(diǎn)".”獲取來(lái)源示例如下:
. d:\greet.ps1 "Luke"或者. .\greet.ps1 "Luke" |
即點(diǎn)".”,空格,然后是一般腳本執行方式。
函數、腳本和作用域,每個(gè)概念要說(shuō)得詳細都得要很大的篇幅。這里只簡(jiǎn)單說(shuō)明它們的概念、彼此間的關(guān)系以及簡(jiǎn)單的用法。讓讀者有個(gè)大概的印象,能夠拿來(lái)就用。
聯(lián)系客服