主題 about_Windows_PowerShell_2.0 簡短描述 描述 Windows PowerShell 2.0 所包含的新功能。 完整描述 Windows PowerShell 2.0 包含幾個重要的功能,這些功能擴充使用範圍、增進可用 性,而且讓您可以更方便、更通盤控制和管理 Windows 環境。 Windows PowerShell 2.0 具有回溯相容性。 Windows PowerShell 2.0 原封不動 地沿用專為 Windows PowerShell 1.0 而設計的 Cmdlet、提供者、嵌入式管理單元、 指令碼、函數和設定檔。 新功能 Windows PowerShell 2.0 包含下列新功能。 遠端 Windows PowerShell 2.0 可讓您以單一 Windows PowerShell 命令在一個或多個遠 端電腦上執行命令。 您可以執行個別的命令,也可以建立固定連線 (工作階段) 來 執行一系列相關命令, 甚至還可以啟動遠端電腦的工作階段,讓輸入的命令直接在 遠端電腦上執行。 Windows PowerShell 的遠端功能建置於 Windows 遠端管理 (WinRM)。 WinRM 是 Microsoft 在 WS-Management 通訊協定方面的實作,此通訊協定是標準的 SOAP 架 構且與防火牆相容。 遠端電腦必須有 Windows PowerShell 2.0、Microsoft .NET Framework 2.0 和 WinRM 服務。 所有能執行 Windows PowerShell 的作業系統都支援遠端命令。 目 前的使用者必須擁有權限,才能在遠端電腦上執行命令。 如需詳細資訊,請參閱 about_Remote_Requirements。 為支援遠端,Windows PowerShell 已新增 Invoke-Command、Enter-PSSession 和 Exit-PSSession Cmdlet,以及其他含有 PSSession 名詞的 Cmdlet。 這些 Cmdlet 可讓您建立及管理固定連線。 ComputerName 參數也已新增至數個 Cmdlet 中,包括 Get-Process、Get-Service 和 Get-Eventlog Cmdlet。 這個參數可讓您取得有關遠端電腦的資訊。 這些 Cmdlet 會使用 .NET Framework 方法取得自己的資料,因此並不存於 Windows PowerShell 遠端, 而且也不需要任何新的程式或設定。 如需詳細資訊,請參閱各 Cmdlet 的說明。 如需遠端命令的詳細資訊,請參閱 about_Remote 和 about_Remote_FAQ。 如需工 作階段的詳細資訊,請參閱 about_PSSessions。 Windows PowerShell ISE Windows PowerShell 2.0 包含 Windows PowerShell 整合式指令碼環境 (ISE), 這是一個主控應用程式,可讓您在圖形化、色彩編碼、Unicode 為主的環境下執行 命令,以及設計、撰寫、測試和偵錯指令碼。 Windows PowerShell ISE 需要 Microsoft .NET Framework 3.0 (含) 以後 版本。 Windows PowerShell ISE 包含下列各項: - [命令] 窗格可讓您執行互動式命令,就如同在 Windows PowerShell 主控台中 一樣。 只要輸入命令,然後按 ENTER, 輸出隨即出現在 [輸出] 窗格。 - [指令碼] 窗格可讓您撰寫、編輯、偵錯和執行函數與指令碼。 - 多個索引標籤 (各有自己的 [命令] 和 [指令碼] 窗格) 可讓您分別進行一個 或多個工作。 Windows PowerShell ISE 是專為初學者和進階使用者設計。 背景工作 背景工作是以非同步方式執行的命令。 當執行背景工作時,即使命令仍在執行 中,命令提示字元也會立即出現。 您可以使用背景工作功能,在背景中執行複 雜的命令,如此您就可以在命令執行的同時使用工作階段進行其他工作。 您可以在本機或遠端電腦上執行背景工作,然後在本機或遠端電腦上儲存結果。 若要以遠端方式執行工作,請使用 Invoke-Command Cmdlet。 Windows PowerShell 包含一組有 Job 名詞 (Job Cmdlet) 的 Cmdlet。 這些 Cmdlet 可用來建立、啟動、管理和刪除背景工作,以及可用來取得背景工作的結 果。 若要取得 Job Cmdlet 的清單,請輸入下列命令: get-command *-job 如需背景工作的詳細資訊,請參閱 about_Jobs。 指令碼偵錯工具 Windows PowerShell 2.0 包含用於指令碼和函數的 Cmdlet 偵錯工具。 完整記載 的公用 API 支援偵錯工具,您可以使用這種 API 自行建置偵錯工具或是自訂或擴 充偵錯工具。 偵錯工具 Cmdlet 可讓您在行、欄、變數和命令上設定中斷點, 也可讓您管理中 斷點以及顯示呼叫堆疊。 您可以建立條件式中斷點,而且在中斷點指定自訂動作, 例如執行診斷和記錄指令碼。 當到達中斷點時,Windows PowerShell 會暫停執行並啟動偵錯工具。 偵錯工具包 含一組可讓您逐步執行程式碼的自訂命令。 您也可以執行標準的 Windows PowerShell 命令來顯示變數的值,還可以使用 Cmdlet 檢查結果。 如需偵錯的詳細資訊,請參閱 about_Debuggers。 Data 區段 針對 Windows PowerShell 2.0 所設計的指令碼可以有一個或多個 DATA 區段,用 以從指令碼邏輯分離資料。 新的 DATA 區段的資料受限於 Windows PowerShell 指 令碼語言的指定子集。 在 Windows PowerShell 2.0 中,DATA 區段是用來支援指令碼國際化。 您可以使 用 DATA 區段,對將翻譯成多種使用者介面語言的使用者訊息字串進行分離及識別。 如需詳細資訊,請參閱 about_Data_Sections。 指令碼國際化 Windows PowerShell 2.0 指令碼國際化功能可讓您為全球各地的使用者提供更好 的服務。 指令碼國際化功能使指令碼和函數能以多種語言向使用者顯示訊息及說 明文字。 指令碼國際化功能在執行期間會查詢作業系統的使用者介面文化特性 ($PsUICulture),然後匯入適當的翻譯文字字串,以便讓您可以向使用者顯示這些 字串。 Data 區段可讓您將文字字串與程式碼分開儲存,方便您識別兩者。 新的 ConvertFrom-StringData Cmdlet 可將文字字串轉換成類似字典的雜湊表,以協助 翻譯工作的進行。 如需詳細資訊,請參閱 about_Script_Internationalization。 WMI Cmdlet Windows PowerShell 2.0 的 Windows Management Instrumentation (WMI) 功能因下列 Cmdlet 的新增而增強: - Remove-WmiObject - Set-WmiInstance - Invoke-WmiMethod 新的參數已新增至 Get-WmiObject Cmdlet。 所有的 WMI Cmdlet 現在都支援下列 參數: - EnableAllPrivileges - Impersonation - Authentication - Authority 這些新的參數讓您可以更精確控制 WMI 作業的安全性設定,而不用直接處理 .NET Framework 類別庫的型別。 若要取得 WMI Cmdlet 的清單,請輸入下列命令: get-help *wmi* 若要取得各 Cmdlet 的說明,請輸入 get-help,後面接著 Cmdlet 名稱。 Get-WinEvent Cmdlet Get-WinEvent Cmdlet 會從本機和遠端電腦上的事件檢視器記錄檔與 Windows 事 件追蹤 (ETW) 檢視器事件記錄檔中取得事件, 而且可以從傳統事件記錄檔和 Windows Vista 引入的 Windows 事件記錄檔中取得事件。 您可以使用 Get-WinEvent 取得代表事件記錄檔、事件記錄檔提供者和記錄檔事件的 物件。Get-WinEvent 可讓您以單一命令來合併不同來源的事件, 而且它還支援格式 為 XML 路徑語言 (XPath)、XML 和雜湊表的進階查詢。 Get-WinEvent 需要 Windows Vista 或 Windows Server 2008 和 Microsoft .NET Framework 3.5。 Out-Gridview Cmdlet Out-GridView Cmdlet 會將其他命令的結果顯示在互動式表格中,讓您可以搜尋、 排序、分組和篩選結果。 例如,您可以將 Get-Process、Get-WmiObject、 Get-WinEvent 或 Get-Eventlog 命令的結果傳送到 Out-GridView,然後以表格 功能來檢查資料。 help out-gridview -full Add-Type Cmdlet Add-Type Cmdlet 可讓您將 .NET Framework 型別從另一個 .NET Framework 語 言的原始程式碼新增至 Windows PowerShell。 Add-Type 會將建立型別的原始程式碼進行編譯,並且產生含有新的 .NET Framework 型別的組件。 所以,您就可以在 Windows PowerShell 命令中 同時使用 .NET Framework 型別與 .NET Framework 所提供的標準物件型別。 您也可以使用 Add-Type 將組件載入工作階段,如此您就可以在 Windows PowerShell 中使用組件中的組件。 Add-Type 可讓您使用 C# 程式庫的 .NET Framework 型別以及存取 Win32 API, 以開發新的 .NET Framework 型別。 如需詳細資訊,請參閱 Add-Type。 事件通知 Windows PowerShell 2.0 引入事件通知。 使用者可以註冊及訂閱事件 (如 Windows PowerShell 事件、WMI 事件或 .NET Framework 事件), 而且還可以同時 以同步和非同步方式對管理與系統事件進行接聽、轉送及處理。 開發人員可以撰寫以事件架構接收狀態變更通知的應用程式。 使用者可以撰寫訂閱 不同事件的指令碼和回應內容的指令碼。 Windows PowerShell 提供可用來建立新事件、取得事件與事件訂閱、註冊與取消註 冊事件、等候事件和刪除事件的 Cmdlet。 如需這些 Cmdlet 的詳細資訊,請輸入 下列命令: get-command *-event 模組 Windows PowerShell 模組可讓您將 Windows PowerShell 指令碼劃分和組織成 獨立、完備、可重複使用的單元。 模組的程式碼會在自己的內容中執行,因此不會 與工作階段中的變數、函數和其他資源有新增、衝突或覆寫的情況發生。 您可以撰寫、散發、合併、共用和重複使用模組,以建置簡單的指令碼與複雜的應用 程式。 Windows PowerShell 2.0 包含可用來新增、取得和移除模組的 Cmdlet,以及可用 來匯出模組成員的 Cmdlet。 如需與模組相關的 Cmdlet 的詳細資訊,請輸入下列 命令: get-command *-module* 交易 Windows PowerShell 2.0 包含交易的支援。 交易能讓您復原整體作業, 但僅供支 援交易的作業使用。 交易是專為需要不可部分完成性、一致性、隔離性、可復原性 的應用程式所設計,例如資料庫及訊息佇列。 支援交易的 Cmdlet 和提供者都有新的 UseTransaction 參數。 若要在交易內啟動 作業,請使用 Start-Transaction Cmdlet。 然後當您使用執行該作業的 Cmdlet 時,請在要將命令設為交易的一部分時使用各 Cmdlet 的 UseTransaction 參數。 如果交易內的任何命令在任一時間點失敗,請使用 Rollback-Transaction Cmdlet 復原交易內的所有命令。 如果所有命令都成功,請使用 Commit-Transaction Cmdlet 讓命令動作變成永久有 效的動作。 Windows PowerShell 2.0 包含可用來啟動、使用、認可和復原交易的 Cmdlet。 如 需這些 Cmdlet 的詳細資訊,請輸入下列命令: get-command *transaction* Windows PowerShell 1.0 的重大變更 -- 已將 HKLM\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine 中的 PowerShellVersion 登錄項目值變更為 2.0。 -- 已新增新的 Cmdlet 和變數。 這些新增項目可能會與設定檔及指令碼中的變數 和函數互相衝突。 -- -IEQ 運算子會對字元執行不區分大小寫比較。 -- 除了 Cmdlet 之外,Get-Command Cmdlet 預設還會取得函數。 -- 產生使用者介面的原生命令無法經由管道輸出至 Out-Host Cmdlet。 -- 新的 Begin、Process、End 和 Dynamic Param 語言關鍵字可能與指令碼和函數 中使用的類似字互相衝突。 如果將這些字解譯為語言關鍵字,可能會造成剖析錯 誤。 -- Cmdlet 名稱解析已變更。 在 Windows PowerShell 1.0 中,當兩個 Windows PowerShell 嵌入式管理單元匯出同名的 Cmdlet 時,會產生執行階段錯誤。 在 Windows PowerShell 2.0 中,當輸入命令名稱時,最後一個新增至工作階段的 Cmdlet 會執行。 若要執行預設不執行的命令,請使用該命令的來源嵌入式管理 單元或模組的名稱來限定 Cmdlet 名稱。 -- 函數名稱後面接著 '-?' 會取得該函數的說明主題 (如果該函數有說明主題的話) -- Microsoft .Net Frameword 方法的參數解析已變更。 在 Windows PowerShell 1.0 中,如果呼叫的 .NET 多載方法有一個以上最合適 的語法,並不會報告錯誤。 在 Windows PowerShell 2.0 中,則會報告模稜兩可 的錯誤。 此外在 Windows PowerShell 2.0 中,已大幅修訂選擇最合適方法的演算法,以 減少模稜兩可的詞句數量。 -- 如果您以管線列舉集合,且嘗試以管線修改集合,Windows PowerShell 會擲回例 外狀況。 例如,下列命令在 Windows PowerShell 1.0 中會執行成功,但在 Windows PowerShell 2.0 中第一個管線反覆運算後就會失敗。 $h = @{Name="Hello"; Value="Test"} $h.keys | foreach-object {$h.remove($_)} 為避免發生這個錯誤,請使用 $() 字元建立列舉值的子運算式。 例如: $($h.keys) | foreach-object {$h.remove($_)} 如需 Windows PowerShell 2.0 的詳細資訊,請瀏覽下列網站: -- Windows PowerShell 網站 https://go.microsoft.com/fwlink/?LinkID=106031 (英文) -- Windows PowerShell 團隊部落格: https://go.microsoft.com/fwlink/?LinkId=143696 (英文) 請參閱 about_Data_Sections about_Debuggers about_Functions_Advanced about_Jobs about_Join about_PSSessions about_Remote about_Script_Internationalization about_Split