Windows PowerShell 的設計整合了取材自數種不同環境的觀念。其中有些觀念對於曾經涉獵特定殼層或程式設計環境的人來說應很熟悉,但只有極少數人已通盤了解全部。探查這些觀念必然有助於了解殼層的梗概。

命令並非文字為主

有別於傳統的命令列介面命令,Windows PowerShell Cmdlet 是設計用於處理所謂物件的結構化資訊,而不單只是顯示在螢幕上的字元字串。命令輸出總是伴隨著額外資訊,可讓您視需要加以運用。本文件稍後將深入討論這個主題。

如果您曾經用過文字處理工具來處理命令列資料,將發現 Windows PowerShell 使用這類工具的方式截然不同。在多數情況下,即使不用文字處理工具也能擷取特定資訊。您可直接使用 Windows PowerShell 標準的物件操控命令來存取部分資料。

可擴充命令系列

像 Cmd.exe 這類介面並未提供可直接擴充內建命令集的方法。您雖可建立外部命令列工具以便在 Cmd.exe 中執行,但這些外部工具沒有整合式說明等服務,且 Cmd.exe 不會自動判定其為有效的命令。

而在 Windows PowerShell 中,您則可建立「Cmdlet」(Windows PowerShell 原生二進位命令,發音為 command-let) 或使用嵌入式管理單元加入 Cmdlet 進而擴充 Cmdlet。Windows PowerShell「嵌入式管理單元」(Snap-in) 為已編譯格式,就像任何其他介面中的二進位工具一樣。您可以使用這些工具將 Windows PowerShell 提供者和新的 cmdlet 加入殼層。

基於 Windows PowerShell 內部命令的特殊本質,我們將之命名為「Cmdlet」。

附註:

Windows PowerShell 也能執行 Cmdlet 以外的命令。《Windows PowerShell 使用手冊》並不打算深入討論這些命令,但其確為值得了解的命令類型。Windows PowerShell 支援副檔名為 .ps1 的指令碼,相當於 UNIX 殼層指令碼和 Cmd.exe 批次檔。Windows PowerShell 也允許您建立內部函數,以直接在介面中使用或在指令碼中使用。

Windows PowerShell 處理主控台輸入與顯示

每當您輸入命令時,命令列輸入始終都是由 Windows PowerShell 直接處理。Windows PowerShell 也會將螢幕上顯示的輸出格式化。這個動作非常重要,因為這既可減少每個 cmdlet 的工作需求,也能確保您依循相同的方式使用任何 cmdlet。例如,命令列說明的用法即已同時針對工具開發人員和使用者進行簡化。

傳統的命令列工具請求與顯示說明的方式各有自己的機制。某些命令列工具使用 /? 觸發說明顯示;部分則使用 -?/H 甚或 //。有些工具會將說明顯示於 GUI 視窗,而非顯示於主控台畫面。一些複雜工具甚至要先解壓縮內部檔案才顯示說明,例如應用程式的更新程式。如果使用的參數不正確,工具可能會忽略輸入的內容,並自動開始執行工作。

若在 Windows PowerShell 中輸入命令,Windows PowerShell 將自動剖析並預先處理全部輸入內容。使用 Windows PowerShell Cmdlet 時只要加上 -? 參數,就一律表示「顯示此命令的說明」。Cmdlet 開發人員則不必剖析命令;只需提供說明文字即可。

重要的是,在 Windows PowerShell 中執行傳統的命令列工具時,甚至亦可使用 Windows PowerShell 的說明功能。Windows PowerShell 會處理參數並將結果傳遞給外部工具。

附註:

若在 Windows PowerShell 中執行圖形介面應用程式,將會開啟應用程式的視窗。Windows PowerShell 只會介入處理您所提供的命令列輸入,或由應用程式傳回主控台視窗的輸出,但從不影響應用程式內部的運作。

Windows PowerShell 使用若干 C# 語法

Windows PowerShell 的語法特性和使用的關鍵字與 C# 程式語言極相似,因為 Windows PowerShell 植基於 .NET Framework。如果您對 C# 感興趣,學會 Windows PowerShell 之後要學習該語言將容易許多。

若您並非 C# 程式設計人員,則可對此相似性不予理會。但是,如果您已熟悉 C#,應可藉由對照兩者的相似性而快速精通 Windows PowerShell。




目錄