天天看點

PowerShell 相關的概念

PS1檔案

Ps1檔案其實就是一個簡單的文本文檔,我們可以用記事本用進行檢視編輯,這裡面就是一條條PowerShell 指令。對于被視為PowerShell腳本的文本檔案,它的檔案名需要使用.PS1擴充(不一定一行就是一跳完整語句)。

腳本運作政策

為了防止惡意腳本運作,PowerShell有腳本執行政策,預設情況下,這個執行政策被設為受限的(Restricted),意味着PowerShell腳本無法執行,Get-ExecutionPolicy指令确定目前的執行政策:

Restricted– 任何腳本不能運作。 

RemoteSigned- 本地建立的腳本可以運作,但從網上下載下傳的腳本且擁有合法驗證簽名,可以運作,其他的都不能運作。

AllSigned – 僅當腳本由受信任的釋出者簽名才能運作。 

Unrestricted –腳本執行不受限制,不管來自哪裡,也不管它們是否有簽名。

當然我們也可以修改執行政策,使用Set-ExecutionPolicy 。

管道

管道的作用是将一個指令的輸出作為另一個指令的輸入,兩個指令(或cmdlet)之間隻需要用管道符号(|)連接配接即可。

為了幫助你了解管道是如何工作的,我們以一個例子進行說明,假設你想建立運作在伺服器上的程序清單,并按程序的ID号進行排序,可以使用Get-Process cmdlet

指令獲得程序清單,但預設情況下清單不會排序,如果将這個cmdlet指令的輸出用管道輸送給Sort-Object ID指令,程序清單将會按程序ID号進行排序,如:

Get-Process | Sort-Object ID

變量

雖然可以使用管道将一個指令的輸出輸送給另一個指令,但管道本身也是有限制的,當你用管道從一個指令向另一個指令傳遞輸出結果時,輸出結果立即被使用,但有時候,你可能需要儲存輸出結果一段時間,以便以後可以使用(或重用),這個時候管道就應該下場,輪到變量上場了。

人們很容易将變量想象成一個倉庫,但在PowerShell中,變量可以儲存指令的完整輸出,例如,假設你想儲存伺服器處于運作中的程序清單,你可以将它賦給一個變量,如:

$a = Get-Process 在這裡,變量被命名為$a,如果你想使用這個變量,隻需要簡單地調用它的名稱即可,例如,鍵入$a便可在螢幕上列印變量的内容。

你可以将多個用管道連接配接的指令的最終輸出賦給一個變量,隻需要用一對小括号将指令括起來即可,例如,假設你想按程序ID對運作中的程序進行排序,然後将結果輸出給一個變量,你可以使用下面這個指令:

$a = (Get-Process | Sort-Object ID)

@符号

通過使用@符号,你可以将清單内容轉換成一個數組,例如,下面的代碼建立了一個名為$Procs的變量,它包含多行文本内容(一個數組):$procs = @{name="explorer","svchost"}

Split

Split操作符根據你指定的字元拆分一個文本字元串,例如,假設你想将一個句子拆分成一個單詞組成的一個數組,你可以使用下面的指令做到:

"This is a test" -split " " 拆分後的結果如下:

This is a test

7 Join

就像Split可以将一個文本字元串拆分成多塊一樣,Join的操作則是逆向的,将多個獨立的塊連接配接成一個整體,例如,下面這行代碼将會建立一個文本字元串,由我的名字和姓氏組成:

"Brien","Posey" -join " " 指令末尾雙引号之間的空格告訴Windows在兩個文本字元串之間插入一個空格。

斷點

運作一個新建立的PowerShell腳本時,如果腳本有Bug,會遇到意想不到的後果,保護自己的一個方法是在腳本的關鍵位置插入斷點,這樣你就可以確定腳本正常運作先,然後再處理可能存在的問題。

插入斷點最簡單的方法是根據行号插入,例如,假設你要在第10行插入一個斷點,可以使用下面的指令:

New-PSBreakpoint -Script C:Scriptsa.ps1 -Line 10 你也可以将斷點綁定到變量上,如果你希望你的腳本任何時候都可以修改a$的内容,可以使用下面的指令:

New-PSBreakpoint -Script C:scriptsa.ps1 -variables a。

可以和PSBreakpoint一起使用的動詞包括New,Get,Enable,Disable和Remove。

Step(單步執行)

調試一個腳本時,有時可能需要逐行運作腳本,可以使用Step-Into cmdlet指令,它會使腳本一行一行地執行,不管有沒有設定斷點,如果你想從這種步進式運作模式退出來,使用Step-Out cmdlet指令即可,但需要注意的是,使用Step-Out cmdlet指令後,斷點仍然有效。

順便說一句,如果你的腳本使用了函數,你可能對Step-Out cmdlet更感興趣,Step-Out的工作方式和Step-Into一樣,不過,如果調用了一個函數,Windows不會逐漸執行,整個函數将會一次性執行。

繼續閱讀