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 來新增類型檔案,以及新增和取代擴充類型數據。

Update-TypeData Cmdlet 可用來預先載入所有類型的數據。 當您開發類型,並想要載入這些新類型以供測試之用時,這項功能特別有用。

從 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.ps1xmlTypesB.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 物件

這個範例會使用 將 Quarter 腳本屬性新增目前會話中的 System.DateTime 物件,例如 Cmdlet 所傳回的物件Get-DateUpdate-TypeData

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 參數時所傳回的 ModuleInfoGrouping 類型Get-Module

Update-TypeData命令會將 SupportsUpdatableHelp 腳本屬性新增至所有匯入的模組。 Value 參數的值是腳本,如果模組的 HelpInfoUri 屬性已填入,$False則傳回 ,否則傳回 $True

第二個命令會將模組對象從 Get-Module 管線傳送至 Format-Table Cmdlet,此 Cmdlet 會顯示 清單中所有模組的 NameSupportsUpdatableHelp 屬性。

參數

-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-ListFormat-TableFormat-Custom 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

指定屬性或方法的名稱。

搭配 TypeNameMemberTypeValueSecondValue 參數使用此參數,以新增或變更類型的屬性或方法。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MemberType

指定要新增或變更的成員類型。

搭配 TypeNameMemberTypeValueSecondValue 參數使用此參數,以新增或變更類型的屬性或方法。 此參數可接受的值為:

  • 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 成員的其他值

搭配 TypeNameMemberTypeValueSecondValue 參數使用此參數,以新增或變更類型的屬性或方法。

當 MemberType 參數的值AliasProperty時,SecondValue 參數的值必須是數據類型。 PowerShell 會將別名屬性的值轉換成指定的型別。 例如,如果您新增別名屬性來提供字串屬性的替代名稱,您也可以指定 System.Int32SecondValue,將別名字符串值轉換成整數。

當 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.TypeConverterSystem.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 取得物件的型別名稱,並將類型數據傳送至物件類型。

搭配 MemberNameMemberTypeValueSecondValue 參數使用此參數,以新增或變更類型的屬性或方法。

此參數是在 Windows PowerShell 3.0 中引進的。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Value

指定屬性或方法的值。

如果您新增 AliasPropertyCodePropertyScriptPropertyCodeMethod 成員,您可以使用 SecondValue 參數來新增其他資訊。

搭配 MemberNameMemberTypeValueSecondValue 參數使用此參數,以新增或變更類型的屬性或方法。

此參數是在 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

輸入

String

您可以使用管線將包含 AppendPathTypeNameTypeData 參數值的字串傳送至此 Cmdlet。

輸出

None

此 Cmdlet 不會傳回任何輸出。