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