Update-TypeData
更新工作階段中的延伸類型資料。
Syntax
Update-TypeData
[[-AppendPath] <String[]>]
[-PrependPath <String[]>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Update-TypeData
[-MemberType <PSMemberTypes>]
[-MemberName <String>]
[-Value <Object>]
[-SecondValue <Object>]
[-TypeConverter <Type>]
[-TypeAdapter <Type>]
[-SerializationMethod <String>]
[-TargetTypeForDeserialization <Type>]
[-SerializationDepth <Int32>]
[-DefaultDisplayProperty <String>]
[-InheritPropertySerializationSet <Nullable`1>]
[-StringSerializationSource <String>]
[-DefaultDisplayPropertySet <String[]>]
[-DefaultKeyPropertySet <String[]>]
[-PropertySerializationSet <String[]>]
-TypeName <String>
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Update-TypeData
[-Force]
[-TypeData] <TypeData[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Cmdlet 會 Update-TypeData
藉由將檔案重載 Types.ps1xml
至記憶體並新增擴充類型數據,以更新會話中的擴充類型數據。
根據預設,PowerShell 會視需要載入擴充類型數據。 如果沒有參數, Update-TypeData
則會重載它已在會話中載入的所有 Types.ps1xml
檔案,包括您新增的任何類型檔案。 您可以使用 的參數 Update-TypeData
來新增類型檔案,並新增和取代擴充類型數據。
Cmdlet Update-TypeData
可用來預先載入所有類型的數據。 當您正在開發類型並且想要基於測試目的載入這些新的類型,這個功能就特別有用。
從 Windows PowerShell 3.0 開始,您可以使用 Update-TypeData
在會話中新增和取代擴充類型數據,而不需使用Types.ps1xml
檔案。 動態方式加入的類型資料 (也就是不具有檔案) 僅新增到目前的工作階段。 若要將類型數據新增至所有工作階段,請將命令新增 Update-TypeData
至您的PowerShell配置檔。 如需詳細資訊,請參閱 about_Profiles。
此外,從 Windows PowerShell 3.0 開始,您可以使用 Get-TypeData
Cmdlet 來取得目前會話中的擴充類型,以及Remove-TypeData
從目前會話中刪除擴充類型的 Cmdlet。
在屬性中發生的例外狀況,或從將屬性新增至 Update-TypeData
命令時,請勿報告錯誤。 這是為了在進行格式化與輸出期間,抑制在許多常見類型中可能會出現的例外狀況。 如果您要取得 .NET 屬性,您可以改用 方法語法來解決例外狀況的隱藏,如下列範例所示:
"hello".get_Length()
請注意,方法語法只能與 .NET 屬性搭配使用。 執行 Update-TypeData
Cmdlet 所新增的屬性無法使用方法語法。
如需 PowerShell 中檔案的詳細資訊 Types.ps1xml
,請參閱 about_Types.ps1xml。
範例
範例 1:更新擴充類型
Update-TypeData
此命令會從 Types.ps1xml
會話中已使用的檔案更新擴充類型組態。
範例 2:多次更新類型
此範例示範如何在相同會話中多次更新類型檔案中的類型。
第一個命令會從 Types.ps1xml
檔案更新擴充類型組態,先處理 TypesA.types.ps1xml
和 TypesB.types.ps1xml
檔案。
第二個命令會示範如何再次更新 TypesA.types.ps1xml
,例如,如果您在檔案中新增或變更類型,您可能會這麼做。 您可以針對檔案重複先前的命令,或執行Update-TypeData
不含參數的命令TypesA.types.ps1xml
,因為TypesA.types.ps1xml
目前會話的類型檔案清單中已經存在。
Update-TypeData -PrependPath TypesA.types.ps1xml, TypesB.types.ps1xml
Update-TypeData -PrependPath TypesA.types.ps1xml
範例 3:將腳本屬性新增至 DateTime 物件
這個範例會使用 Update-TypeData
將 Quarter 腳本屬性新增至目前會話中的 System.DateTime 物件,例如 Cmdlet 所傳回的物件 Get-Date
。
Update-TypeData -TypeName "System.DateTime" -MemberType ScriptProperty -MemberName "Quarter" -Value {
if ($this.Month -in @(1,2,3)) {"Q1"}
elseif ($this.Month -in @(4,5,6)) {"Q2"}
elseif ($this.Month -in @(7,8,9)) {"Q3"}
else {"Q4"}
}
(Get-Date).Quarter
Q1
此命令Update-TypeData
會使用 TypeName 參數來指定 System.DateTime 類型、MemberName 參數來指定新屬性的名稱、指定 ScriptProperty 類型的 MemberType 屬性,以及指定 Value 參數來指定決定年度季的腳本。
Value 屬性的值為計算目前年度季別的指令碼。 腳本區塊會 $this
使用自動變數來表示物件的目前實例和 In 運算元,以判斷月份值是否出現在每個整數陣列中。 如需運算子的詳細資訊 -in
,請參閱 about_Comparison_Operators。
第二個命令會取得目前日期的新 Quarter 屬性。
範例 4:依預設更新清單中顯示的類型
此範例示範如何設定預設在清單中顯示之型別的屬性,也就是未指定任何屬性時。 由於類型數據未在檔案中 Types.ps1xml
指定,因此只有在目前的會話中才有效。
Update-TypeData -TypeName "System.DateTime" -DefaultDisplayPropertySet "DateTime, DayOfYear, Quarter"
Get-Date | Format-List
Thursday, March 15, 2012 12:00:00 AM
DayOfYear : 75
Quarter : Q1
第一個命令會 Update-TypeData
使用 Cmdlet 來設定 System.DateTime 類型的預設清單屬性。 此命令使用 TypeName 參數來指定類型和 DefaultDisplayPropertySet 參數來指定預設清單屬性。 選取的屬性包含上一個範例中新增的 Quarter 腳本屬性。
第二個命令會 Get-Date
使用 Cmdlet 來取得代表目前日期 的 System.DateTime 物件。 此命令會使用管線運算符 () |
,將 DateTime 物件傳送至 Format-List
Cmdlet。 Format-List
因為命令未指定要顯示在清單中的屬性,所以 PowerShell 會使用命令所建立的Update-TypeData
預設值。
範例 5:更新管道對象的類型數據
Get-Module | Update-TypeData -MemberType ScriptProperty -MemberName "SupportsUpdatableHelp" -Value {
if ($this.HelpInfoUri) {$True} else {$False}
}
Get-Module -ListAvailable | Format-Table Name, SupportsUpdatableHelp
Name SupportsUpdatableHelp
---- ---------------------
Microsoft.PowerShell.Diagnostics True
Microsoft.PowerShell.Host True
Microsoft.PowerShell.Management True
Microsoft.PowerShell.Security True
Microsoft.PowerShell.Utility True
Microsoft.WSMan.Management True
PSDiagnostics False
PSScheduledJob True
PSWorkflow True
ServerManager True
TroubleshootingPack False
這個範例示範當您將對象傳送至 Update-TypeData
時, Update-TypeData
會新增物件類型的擴充型別數據。
這項技術比使用 Get-Member
Cmdlet 或 Get-Type
方法來取得物件類型更快。 不過,如果您透過管線將 物件集合傳送至 Update-TypeData
,它會更新第一個物件類型的型別數據,然後傳回集合中所有其他對象的錯誤,因為該成員已在型別上定義。
第一個命令會 Get-Module
使用 Cmdlet 來取得 PSScheduledJob 模組。 命令會將模組物件管線傳送至 Update-TypeData
Cmdlet,以更新 System.Management.Automation.PSModuleInfo 類型的類型數據,以及衍生自它的類型,例如當您在命令中使用 ListAvailable 參數時所Get-Module
傳回的 ModuleInfoGrouping 類型。
命令 Update-TypeData
會將 SupportsUpdatableHelp 腳本屬性新增至所有匯入的模組。 Value 參數的值是腳本,如果模組的 HelpInfoUri 屬性已填入,則$False
傳回 $True
,否則為 。
第二個命令會將模組對象從 Get-Module
管線傳送至 Format-Table
Cmdlet,以顯示清單中所有模組的 Name 和 SupportsUpdatableHelp 屬性。
參數
-AppendPath
指定選擇性 .ps1xml
檔案的路徑。 指定的檔案會依載入內建檔案之後所列出的順序載入。 您也可以使用管線將 AppendPath 值傳送至 Update-TypeData
。
Type: | String[] |
Aliases: | PSPath, Path |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Confirm
在執行 Cmdlet 前提示您確認。
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefaultDisplayProperty
指定未指定其他屬性時,Cmdlet 所顯示 Format-Wide
之類型的屬性。
輸入類型的標準或延伸屬性的名稱。 此參數的值可以是相同命令中新增之類型的名稱。
只有在檔案中 Format.ps1xml
沒有針對類型定義的寬檢視時,這個值才有效。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefaultDisplayPropertySet
指定類型的一或多個屬性。 未指定其他屬性時, Format-List
Cmdlet 會顯示這些屬性。
輸入類型的標準或延伸屬性的名稱。 此參數的值可以是相同命令中新增之類型的名稱。
只有在檔案中 Format.ps1xml
沒有定義類型的清單檢視時,這個值才有效。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefaultKeyPropertySet
指定類型的一或多個屬性。 當未指定其他屬性時,和 Sort-Object
Cmdlet 會使用這些Group-Object
屬性。
輸入類型的標準或延伸屬性的名稱。 此參數的值可以是相同命令中新增之類型的名稱。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Force
表示 Cmdlet 會使用指定的型別數據,即使已針對該類型指定類型數據也一樣。
此參數是在 Windows PowerShell 3.0 引進。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InheritPropertySerializationSet
指出是否繼承串行化的屬性集。 預設值是 $Null
。 此參數可接受的值為:
$True
. 已繼承屬性集。$False
. 未繼承屬性集。$Null
. 未定義繼承。
只有當 SerializationMethod 參數的值為 SpecificProperties
時,這個參數才有效。 當此參數的值是 $False
時,需要 PropertySerializationSet 參數。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Nullable<T>[Boolean] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MemberName
指定屬性或方法的名稱。
使用此參數與 TypeName、MemberType、Value 及 SecondValue 參數,新增或變更類型的屬性或方法。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MemberType
指定要新增或變更的成員類型。
使用此參數與 TypeName、MemberType、Value 及 SecondValue 參數,新增或變更類型的屬性或方法。 此參數可接受的值為:
- AliasProperty
- CodeMethod
- CodeProperty
- Noteproperty
- ScriptMethod
- ScriptProperty
如需這些值的相關信息,請參閱 PSMemberTypes 列舉。
此參數是在 Windows PowerShell 3.0 引進。
Type: | PSMemberTypes |
Accepted values: | NoteProperty, AliasProperty, ScriptProperty, CodeProperty, ScriptMethod, CodeMethod |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PrependPath
指定選擇性 .ps1xml
檔案的路徑。 指定的檔案會依載入內建檔案之前所列出的順序載入。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PropertySerializationSet
指定已序列化的屬性名稱。 當 SerializationMethod 參數的值為 SpecificProperties 時使用此參數。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SecondValue
指定 AliasProperty、ScriptProperty、CodeProperty 或 CodeMethod 成員的額外值。
使用此參數搭配 TypeName、 MemberType、 Value 和 SecondValue 參數,以新增或變更類型的屬性或方法。
當 MemberType 參數的值是 AliasProperty
時, SecondValue 參數的值必須是數據類型。 PowerShell 會將 (轉換成指定的類型,) 別名屬性的值。 例如,如果您新增別名屬性來提供字串屬性的替代名稱,您也可以指定 System.Int32 的 SecondValue,將別名字符串值轉換成整數。
當 MemberType 參數的值是 ScriptProperty
時,您可以使用 SecondValue 參數來指定額外的腳本區塊。 Value 參數值中的指令碼區塊會取得變數值。 SecondValue 參數值中的指令碼區塊會設定變數值。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Object |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SerializationDepth
指定要將多少層的類型物件序列化為字串。 預設值 1
會串行化 物件及其屬性。 的值 0
會串行化物件,但不會串行化其屬性。 的值 2
會串行化 物件、其屬性,以及屬性值中的任何物件。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Int32 |
Position: | Named |
Default value: | 1 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SerializationMethod
指定類型的序列化方法。 序列化方法決定哪些類型的屬性會序列化,以及用來序列化它們的技術。 此參數可接受的值為:
AllPublicProperties
. 序列化類型的所有公用屬性。 您可以使用 SerializationDepth 參數,決定是否序列化子屬性。String
. 將類型序列化為字串。 您可以使用 StringSerializationSource,指定要做為序列化結果的類型屬性。 否則,會使用物件的 ToString 方法將類型序列化。SpecificProperties
. 只串行化這個型別的指定屬性。 使用 PropertySerializationSet 參數,指定已序列化的類型屬性。 您也可以使用 InheritPropertySerializationSet 參數來決定是否要繼承屬性集,與 SerializationDepth 參數來決定是否要序列化子屬性。
在 PowerShell 中,串行化方法會儲存在 PSStandardMembers 內部物件中。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-StringSerializationSource
指定類型的屬性名稱。 指定屬性的值可做為序列化結果。 只有當 SerializationMethod 參數的值是 String 時,這個參數才有效。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TargetTypeForDeserialization
指定此類型物件還原序列化時所轉換成為的類型。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Type |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeAdapter
指定類型配接器的類型,例如 Microsoft.PowerShell.Cim.CimInstanceAdapter。 類型配接器可讓PowerShell取得類型的成員。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Type |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeConverter
指定類型轉換器來轉換不同類型之間的值。 如果定義了類型的類型轉換器,類型轉換器的執行個體將會用於轉換。
輸入衍生自 System.ComponentModel.TypeConverter 或 System.Management.Automation.PSTypeConverter 類別的 System.Type 值。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Type |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeData
指定此 Cmdlet 新增至工作階段的型別資料陣列。 輸入包含 TypeData 物件的變數,或取得 TypeData 物件的命令,例如 Get-TypeData
命令。 您也可以使用管線將 TypeData 物件傳送至 Update-TypeData
。
此參數是在 Windows PowerShell 3.0 引進。
Type: | TypeData[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-TypeName
指定要延伸的類型名稱。
對於 System 命名空間中的類型,請輸入簡短名稱。 否則,需要完整類型名稱。 不支援萬用字元。
您可以使用管線將類型名稱傳送至 Update-TypeData
。 當您使用管線將物件傳送至 Update-TypeData
時, Update-TypeData
取得對象的類型名稱,並將類型數據傳送至物件類型。
使用此參數搭配 MemberName、 MemberType、 Value 和 SecondValue 參數,以新增或變更類型的屬性或方法。
此參數是在 Windows PowerShell 3.0 引進。
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Value
指定屬性或方法的值。
如果您新增 AliasProperty
、 CodeProperty
、 ScriptProperty
或 CodeMethod
成員,您可以使用 SecondValue 參數來新增其他資訊。
使用此參數搭配 MemberName、 MemberType、 Value 和 SecondValue 參數,以新增或變更類型的屬性或方法。
此參數是在 Windows PowerShell 3.0 引進。
Type: | Object |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
您可以使用管線將包含 AppendPath、 TypeName 或 TypeData 參數值的字串傳送至 Update-TypeData
。
輸出
None
此 Cmdlet 不會傳回任何輸出。