本主題描述如何建立提供者,讓用戶能夠作數據存放區中項目的屬性。 因此,這種類型的提供者稱為 Windows PowerShell 屬性提供者。 例如,Windows PowerShell 所提供的登錄提供者會將登錄機碼值當做登錄機碼專案的屬性來處理。 這種類型的提供者必須將 System.Management.Automation.Provider.IPropertyCmdletProvider 介面新增至 .NET 類別的實作。
備註
Windows PowerShell 提供範本檔案,可讓您用來開發 Windows PowerShell 提供者。 TemplateProvider.cs檔案位於適用於 Windows Vista 和 .NET Framework 3.0 運行時間元件的 Microsoft Windows 軟體開發工具包上。 如需下載指示,請參閱 如何安裝 Windows PowerShell 和下載 Windows PowerShell SDK。 下載的範本可在 <PowerShell 範例> 目錄中取得。 您應該製作此檔案的複本,並使用複本來建立新的 Windows PowerShell 提供者,移除您不需要的任何功能。 如需其他 Windows PowerShell 提供者實作的詳細資訊,請參閱 設計 Windows PowerShell 提供者。
謹慎
屬性提供者的方法應該使用 System.Management.Automation.Provider.CmdletProvider.Writepropertyobject* 方法寫入任何物件。
定義 Windows PowerShell 提供者
屬性提供者必須建立支援 System.Management.Automation.Provider.IPropertyCmdletProvider 介面的 .NET 類別。 以下是 Windows PowerShell 所提供TemplateProvider.cs檔案的預設類別宣告。
定義基底功能
System.Management.Automation.Provider.IPropertyCmdletProvider 介面可以附加至任何提供者基類,但 System.Management.Automation.Provider.DriveCmdletProvider 類別除外。 新增您使用之基類所需的基底功能。 如需基類的詳細資訊,請參閱 設計 Windows PowerShell 提供者。
擷取屬性
若要擷取屬性,提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 方法,以支援來自 Get-ItemProperty
Cmdlet 的呼叫。 這個方法會擷取位於指定提供者內部路徑之項目的屬性(完整)。
providerSpecificPickList
參數會指出要擷取的屬性。 如果此參數 null
或空白,則方法應該會擷取所有屬性。 此外,System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 寫入代表所擷取屬性之屬性包 System.Management.Automation.PSObj ect 物件的實例。 方法應該不會傳回任何內容。
建議實作 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 支援選擇清單中每個元素的屬性名稱通配符擴充。 若要這樣做,請使用 System.Management.Automation.WildcardPattern 類別來執行通配符模式比對。
以下是 Windows PowerShell 所提供TemplateProvider.cs檔案的預設實作 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty*。
實作 GetProperty 的注意事項
下列條件可能適用於您實作 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty*:
定義提供者類別時,Windows PowerShell 屬性提供者可能會從 System.Management.Automation.Provider.ProviderCapabilities 列舉宣告 ExpandWildcards、Filter、Include 或 Exclude 的提供者功能。 在這些情況下,System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 方法的實作必須確保傳遞至方法的路徑符合指定功能的需求。 若要這樣做,此方法應該存取適當的屬性,例如,System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
根據預設,除非 System.Management.Automation.Provider.CmdletProvider.Force* 属性設定為
true
,否則此方法的覆寫不應該擷取使用者隱藏的物件讀取器。 如果路徑代表用戶隱藏的專案,且 System.Management.Automation.Provider.CmdletProvider.Force* 設定為false
,則應該寫入錯誤。
將動態參數附加至 Get-ItemProperty Cmdlet
Get-ItemProperty
Cmdlet 可能需要在運行時間動態指定的其他參數。 若要提供這些動態參數,Windows PowerShell 屬性提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 方法。
path
參數表示完整提供者內部路徑,而 providerSpecificPickList
參數則指定命令行上輸入的提供者特定屬性。 如果屬性傳送至 Cmdlet,此參數可能會 null
或空白。 在此情況下,此方法會傳回物件,其屬性和欄位具有類似 Cmdlet 類別的屬性或 System.Management.Automation.RuntimeDefinedParameterDictionary 物件。 Windows PowerShell 運行時間會使用傳回的物件,將參數新增至 Cmdlet。
以下是 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 的默認實作, 來自 Windows PowerShell 所提供的TemplateProvider.cs檔案。
設定屬性
若要設定屬性,Windows PowerShell 屬性提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法,以支援來自 Set-ItemProperty
Cmdlet 的呼叫。 這個方法會在指定的路徑設定專案的一或多個屬性,並視需要覆寫提供的屬性。
System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 也會寫入代表更新屬性屬性包的 System.Management.Automation.PSObject 物件實例。
以下是 Windows PowerShell 所提供TemplateProvider.cs檔案的預設 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty*。
實作 Set-ItemProperty
下列條件適用於 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty*的實作:
定義提供者類別時,Windows PowerShell 屬性提供者可能會從 System.Management.Automation.Provider.ProviderCapabilities 列舉宣告 ExpandWildcards、Filter、Include 或 Exclude 的提供者功能。 在這些情況下,System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法的實作必須確保傳遞至方法的路徑符合指定功能的需求。 若要這樣做,此方法應該存取適當的屬性,例如,System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
根據預設,除非 System.Management.Automation.Provider.CmdletProvider.Force* 属性設定為
true
,否則此方法的覆寫不應該擷取使用者隱藏的物件讀取器。 如果路徑代表用戶隱藏的專案,且 System.Management.Automation.Provider.CmdletProvider.Force* 設定為false
,則應該寫入錯誤。實作 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法應呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldProcess,並在對數據存放區進行任何變更之前驗證其傳回值。 當系統狀態變更時,這個方法可用來確認作業的執行,例如重新命名檔案。 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 會將要變更的資源名稱傳送給使用者,並使用 Windows PowerShell 運行時間處理任何命令行設定或喜好設定變數,以判斷應該顯示的內容。
呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 傳回
true
,如果可能進行危險的系統修改,則為 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法應該呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldContinue 方法。 這個方法會將確認訊息傳送給使用者,以允許其他意見反應指出應該繼續作業。
附加 Set-ItemProperty Cmdlet 的動態參數
Set-ItemProperty
Cmdlet 可能需要在運行時間動態指定的其他參數。 若要提供這些動態參數,Windows PowerShell 屬性提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.SetPropertyDynamicParameters* 方法。 這個方法會傳回具有屬性和字段的物件,其剖析屬性類似於 Cmdlet 類別或 System.Management.Automation.RuntimeDefinedParameterDictionary 物件。 如果未新增任何動態參數,則可以傳回 null
值。
以下是 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 的默認實作, 來自 Windows PowerShell 所提供的TemplateProvider.cs檔案。
清除屬性
若要清除屬性,Windows PowerShell 屬性提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法,以支援來自 Clear-ItemProperty
Cmdlet 的呼叫。 這個方法會為位於指定路徑的項目設定一或多個屬性。
以下是 Windows PowerShell 所提供TemplateProvider.cs檔案的預設 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty*。
實作 ClearProperty 的注意事項
下列條件可能適用於您實作 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty*:
定義提供者類別時,Windows PowerShell 屬性提供者可能會從 System.Management.Automation.Provider.ProviderCapabilities 列舉宣告 ExpandWildcards、Filter、Include 或 Exclude 的提供者功能。 在這些情況下,System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法的實作必須確保傳遞至方法的路徑符合指定功能的需求。 若要這樣做,此方法應該存取適當的屬性,例如,System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
根據預設,除非 System.Management.Automation.Provider.CmdletProvider.Force* 属性設定為
true
,否則此方法的覆寫不應該擷取使用者隱藏的物件讀取器。 如果路徑代表用戶隱藏的專案,且 System.Management.Automation.Provider.CmdletProvider.Force* 設定為false
,則應該寫入錯誤。實作 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法應該呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldProcess,並在對數據存放區進行任何變更之前驗證其傳回值。 這個方法可用來在對系統狀態進行變更之前,先確認作業的執行,例如清除內容。 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 會將要變更的資源名稱傳送給使用者,Windows PowerShell 運行時間會考慮判斷應該顯示的內容的任何命令行設定或喜好設定變數。
呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 傳回
true
,如果可能進行危險的系統修改,則為 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法應該呼叫 System.Management.Automation.Provider.CmdletProvider.ShouldContinue 方法。 這個方法會將確認訊息傳送給使用者,以允許其他意見反應,指出應該繼續潛在的危險作業。
將動態參數附加至 Clear-ItemProperty Cmdlet
Clear-ItemProperty
Cmdlet 可能需要在運行時間動態指定的其他參數。 若要提供這些動態參數,Windows PowerShell 屬性提供者必須實作 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearPropertyDynamicParameters* 方法。 這個方法會傳回具有屬性和字段的物件,其剖析屬性類似於 Cmdlet 類別或 System.Management.Automation.RuntimeDefinedParameterDictionary 物件。 如果未新增任何動態參數,則可以傳回 null
值。
以下是 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearPropertyDynamicParameters* 的默認實作, Windows PowerShell 所提供的TemplateProvider.cs檔案。