PowerShell入門(八) 函式 指令碼 作用域

2022-03-04 00:59:52 字數 1725 閱讀 7571

指令碼所體現的是powershell的程式設計特性,是任務自動化的基礎。函式是比指令碼粒度更細的**復用單元,可以定義在命令列中或者指令碼中。作用域就是變數和函式的作用範圍,是執行上下文的劃分。

函式函式就是命名的命令列表,與一般程式語言中的函式概念具有相同的範疇。函式中不但可以有簡單命令,還可以有控制流程的命令,如if、while、switch等。函式可以有匿名引數或者命名引數列表。命令引數列表可以用大括號或者param關鍵字定義。匿名函式可以使用$args變數來訪問。函式也可接收來自管道的物件作為輸入,管道物件可以通過$input變數類訪問。

在指令碼中定義的函式,可以定義在#require命令和param關鍵字之後的任何位置,但要定義在呼叫之前。還有,自定義的函式不會自動執行,需要被明確呼叫。可以使用filter或者function定義函式,用filter關鍵字定義的函式比較簡單,而使用function關鍵字定義的函式可以有更加複雜的功能。 

簡單函式定義示例如下:

function sayhello

函式呼叫方法與使用cmdlet方法相似,輸入sayhello,並回車。則結果為hello。

指令碼指令碼就是將一些命令存貯到檔案檔案中,並將該文字檔案的副檔名設定為.ps1。指令碼中除了可以使用常用cmdlet,控制流程的命令外,還可以定義和呼叫自定義函式,呼叫方法與呼叫cmdlet方法類似。

指令碼也可以有引數,既可以是命名引數也可以是匿名引數。在引數的使用上,指令碼與函式非常相似。

另外,powershell的指令碼執行策略預設不允許執行任何指令碼檔案,修改執行策略可執行如下命令:set-executionpolicy remotesigned。需要謹記的是,修改執行策略會帶來安全隱患,修改執行策略之前請三思。

簡單指令碼d:\greet.ps1示例如下

param([string] somebody)

function greet([string] 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入門知識

參見 win10系統powershell執行.ps1檔案 注 win10系統預設已安裝了powershell win r開啟執行 輸入 psversiontable檢視powershell版本 進入ps1檔案目錄 ps c users admin cd e devenviroments skype ...

PowerShell入門簡介

說實話,我總感覺 powershell 是 cmd 的加強版,但是看官方介紹,功能甚是強大,用處有待我們發掘。以下列表顯示可在 powershell 中使用的常見 cmd.exe 和 unix 命令 get alias cmdlet可以檢視別名,比如get alias cat set alias c...

power shell函式與管道

1 where object 過濾列表項或命令輸出結果 get childitem where object 瀏覽目錄,篩選檔案大小小於等900b get childitem where object 瀏覽目錄,篩選檔案匹配 工具 2 foreach object 處理列表或者命令輸出的每乙個專案 ...