PowerShell 程式碼的運作方式

已完成

為了協助您了解程式碼的運作方式,我們必須討論何謂程式、何謂程式設計語言,以及該語言如何將命令傳達給您的電腦。

程式是什麼?

程式是一組完成計算工作的指示。 這些指示會編譯成電腦可以理解的格式,然後由使用者執行。 使用者可以是個人或其他程式。 電腦會依序執行指令 (一次一行),直到沒有其他行可供執行,或明確告知程式停止為止。

即使是最基本的程式也會執行下列一或多項工作:

  • 接受來源中的輸入。 輸入包含下列資訊:
    • 來自輸入鍵盤的使用者,或是選取介面上的控制項。
    • 從檔案中擷取。
    • 從另一個程式或網路連線呼叫。
  • 處理資訊,其中包含以下內容:
    • 執行邏輯。
    • 執行數學計算。
    • 操作資料輸入以產生新的資料。
  • 輸出結果,其中包含以下資訊:
    • 在螢幕上顯示給使用者。
    • 儲存至檔案。
    • 已傳送至另一個程式。

程式可能採用不同的形式來進行不同的用途。 程式可以是:

  • 獨立應用程式,例如遊戲、文字編輯器、帳單軟體等等。
  • 指令碼,例如在其他程式內執行以將某些功能自動化的進階巨集。
  • 即時程式碼、方程式和資料視覺效果的組合。

某些程式 (包括本課程模組中的範例) 只需要幾行程式碼。 但複雜的程式 (例如作業系統) 需要數萬行或甚至數百萬行的程式碼。

什麼是程式設計語言?

程式設計語言的工作是讓人員能夠以人類可讀易懂的方式撰寫電腦中的指示。 電腦是以與人類截然不同的方式來理解語言。 程式設計語言為程式撰寫者提供一種特定且較不復雜的方式來與電腦互動,以為其提供指示。 您以程式設計語言撰寫的指示稱為程式碼

有許多程式設計語言,各有不同的語法。 不過,在您了解第一個程式設計語言之後,就可以將其許多概念套用到您學到的每一種新語言。

什麼是語法?

如同任何口語或書寫的語言,程式設計語言都有自己的程式設計規則,稱為語法。 任何程式設計語言的語法都包括關鍵字運算子或其他可能是該語言特定的規則類型。

關鍵字是具有特殊意義和行為的程式設計語言所保留的特定字組。 在 PowerShell 中,許多關鍵字讀起來都像是英文。 例如,ifwhilereturn 是關鍵字,可用來在 PowerShell 和許多其他語言中撰寫程式碼。

運算子是特殊字元,例如括號 (()) 或等號 (=)。 這些字元會告知電腦執行特定的數學、關聯式或邏輯作業來產生結果。

當您在上一個單元的 Cloud Shell 終端機中輸入您的程式碼時,可能已注意到對文字和符號的色彩有小幅的變更。 此色彩編碼稱為語法醒目提示。 當您在讀取程式碼時,語法醒目提示可協助找出您可能犯的任何錯誤。 這項功能可在許多程式碼編輯器 (例如 Visual Studio Code) 中使用,甚至更健全。

在 PowerShell 中編譯程式碼

電腦並不擅長以我們撰寫程式的方式來讀取程式。 程式設計語言必須轉譯成電腦可以理解的形式。 程式設計語言有多種方式可以執行這項操作。

許多程式設計語言都會將程式碼編譯為個別步驟。 您可以撰寫程式碼、透過稱為編譯器的特殊程式來執行程式碼,且編譯器會產生可執行檔封裝來執行。

其他語言 (例如 Python) 有所謂的解譯器,其會解讀電腦的程式碼,並在解讀程式碼時,一次執行一行程式碼。

PowerShell 的運作方式與編譯和解讀的方法稍有不同且又稍有類似之處。

PowerShell 會編譯成抽象語法樹狀結構 (AST),首先在記憶體中,然後再執行。 但是您不需要在這裡深入探討以使用 PowerShell。 您只需要知道,電腦會先在 AST 中檢查您的程式碼,因為其會尋找主要問題。 如果一切都沒問題,電腦就會執行您的程式,而不需要經過編譯的可執行檔程式。 這種方法很有用,因為其可確保您的程式碼會在由電腦執行之前正確執行,在此情況下,可能會因為語法錯誤而進行變更並停止。 相反地,轉譯的語言 (例如 Python) 會執行程式碼,直到其在語法中發現錯誤為止。

探索 PowerShell

PowerShell 的一項重要功能是內建的說明系統,可讓您快速存取 PowerShell 命令的相關資訊。 如果您在撰寫時遇到困難,可以使用 Get-Help 命令來查閱命令或 PowerShell 概念的說明。 例如,若要查看 Write-Output 命令的所有詳細資料,您可以輸入並執行下列命令:

Get-Help -Name 'Write-Output' -Full

Get-Help 是要執行的命令,而 Write-Output 是用來取得說明的命令名稱。 -Full 參數會指示 PowerShell 取得指定命令的所有資訊,包括命令描述、參數資訊、範例等等。 您可以在任何 PowerShell 終端機 (包括 Azure Cloud Shell 終端機) 中存取此說明資訊。

如果您想要探索 PowerShell 所提供的所有命令,可以使用 Get-Command * 來檢視完整清單。 星號 (*) 是 PowerShell 中的萬用字元。 其可讓您比對模式,以更動態的方式尋找資訊。 在此情況下,您會使用 * 來篩選所有可用的命令。 例如,若要取得具有 User 的所有命令,請執行 Get-Command *User*

PowerShell 還有一個很棒的功能,就是其隨附整合式殼層。 您可以使用殼層來測試程式碼並與輸出互動,而不需要在每次要測試某個程式碼時執行程式碼。 為了確保程式碼能夠如預期般運作,您可以直接在終端中輸入程式碼。