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