這個主題是學習如何建立 Windows PowerShell 提供者的起點。 此處描述的基本提供者提供了啟動與停止提供者的方法,雖然此提供者無法存取資料儲存或取得或設定資料儲存庫中的資料,但它提供了所有提供者所需的基本功能。
如前所述,這裡描述的基本服務提供者實作啟動與停止服務的方法。 Windows PowerShell 執行時會呼叫這些方法來初始化和取消初始化提供者。
備註
你可以在 Windows PowerShell 提供的AccessDBSampleProvider01.cs檔案中找到此提供者的範例。
定義 Windows PowerShell 提供者類別
建立 Windows PowerShell 提供者的第一步是定義其 .NET 類別。 這個基本提供者定義了一個稱為 AccessDBProviderSystem.Management.Automation.Provider.CmdletProvider 基底類別的類別。
建議您將提供者類別置於 API 命名空間的命名 Providers 空間,例如 xxx.PowerShell.Providers。 此提供者使用 Microsoft.Samples.PowerShell.Provider 命名空間,所有 Windows PowerShell 提供者範例皆在該命名空間執行。
備註
Windows PowerShell 提供者的類別必須明確標記為公開。 未標記為公用的類別將預設為內部類別,Windows PowerShell 執行環境不會找到。
以下是這個基本提供者的類別定義:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
在類別定義前,你必須宣告 System.Management.Automation.Provider.CmdletProviderAttribute 屬性,語法為 [CmdletProvider()]。
如果需要,你可以設定屬性關鍵字來進一步宣告類別。 請注意,這裡宣告的 System.Management.Automation.Provider.CmdletProviderAttribute 屬性包含兩個參數。 第一個屬性參數指定提供者的預設友善名稱,使用者可日後修改。 第二個參數指定了 Windows PowerShell 定義的能力,提供者在指令處理過程中會暴露給 Windows PowerShell 執行時。 提供者能力的可能值由 系統管理自動化(System.Management.Automation.Provider.ProviderCapabilities )列舉定義。 因為這是基礎供應商,所以不支援任何功能。
備註
Windows PowerShell 提供者的完整限定名稱包含 Windows PowerShell 在提供者註冊時決定的組合名稱及其他屬性。
定義 Provider-Specific 州資訊
System.Management.Automation.Provider.CmdletProvider 基底類別及所有衍生類別被視為無狀態,因為 Windows PowerShell 執行環境僅在必要時建立提供者實例。 因此,若提供者需要對提供者專用資料進行全面控制與狀態維護,必須從 System.Management.Automation.ProviderInfo 類別衍生出類別。 你的衍生類別應該定義維持狀態所需的成員,這樣當 Windows PowerShell 執行時呼叫 System.Management.Automation.Provider.CmdletProvider.Start* 方法來初始化提供者時,提供者專屬的資料就能被存取。
Windows PowerShell 提供者也能維持基於連線的狀態。 如需更多關於維持連線狀態的資訊,請參閱 建立 PowerShell 磁碟機提供者。
初始化提供者
要初始化提供者時,Windows PowerShell 執行時會呼叫 System.Management.Automation.Provider.CmdletProvider.Start* 方法。 大多數情況下,你的提供者可以使用此方法的預設實作,該實作會直接回傳描述你的提供者的 System.Management.Automation.ProviderInfo 物件。 然而,如果你想新增更多初始化資訊,你應該實作自己的 System.Management.Automation.Provider.CmdletProvider.Start* 方法,回傳一個經過修改的 System.Management.Automation.ProviderInfo 物件,並傳給你的提供者。 一般而言,此方法應回傳已傳達的 System.Management.Automation.ProviderInfo 物件,或包含其他初始化資訊的修改過的 System.Management.Automation.ProviderInfo 物件。
這個基本提供者不會覆蓋此方法。 然而,以下程式碼顯示了此方法的預設實作:
提供者可依 照定義提供者特定資料狀態維持提供者專屬資訊的狀態。 在這種情況下,你的實作必須覆寫 System.Management.Automation.Provider.CmdletProvider.Start* 方法,才能回傳導出的類別實例。
啟動動態參數
你對 System.Management.Automation.Provider.CmdletProvider.Start* 方法的提供者實作,可能會需要額外參數。 此時,提供者應覆寫 System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* 方法,並回傳一個具有類似 cmdlet 類別或 System.Management.Runtime.RuntimeDefinedParameterDictionary 物件的屬性與欄位的物件。
這個基本提供者不會覆蓋此方法。 然而,以下程式碼顯示了此方法的預設實作:
取消初始化提供者
為了釋放 Windows PowerShell 提供者所使用的資源,你的提供者應該實作自己的 System.Management.Automation.Provider.CmdletProvider.Stop* 方法。 此方法由 Windows PowerShell 執行時呼叫,在會話結束時取消初始化提供者。
這個基本提供者不會覆蓋此方法。 然而,以下程式碼顯示了此方法的預設實作:
程式碼範例
完整範例程式碼請參閱 AccessDbProviderSample01 程式碼範例。
測試 Windows PowerShell 提供者
一旦你的 Windows PowerShell 提供者已經註冊到 Windows PowerShell,你可以在命令列執行支援的 cmdlets 來測試。 對於這個基本提供者,執行新的 shell,並使用 Get-PSProvider cmdlet 取得提供者清單,確保 AccessDb 提供者存在。
Get-PSProvider
會出現下列輸出:
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}