共用方式為


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

這個範例會使用 Update-TypeDataQuarter 腳本屬性新增至目前會話中的 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 參數時所傳回的 ModuleInfoGrouping 類型Get-Module

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

第二個命令會使用管線將模組對象從 Get-Module 傳送至 Format-Table 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-TableFormat-Custom Cmdlet 會顯示Format-List這些屬性。

輸入類型的標準或延伸屬性的名稱。 此參數的值可以是相同命令中新增之類型的名稱。

只有在檔案中 Format.ps1xml 沒有針對類型定義的清單、數據表或自定義檢視時,這個值才有效。

此參數是在 Windows PowerShell 3.0 引進。

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

-DefaultKeyPropertySet

指定類型的一或多個屬性。 未指定其他屬性時, Group-ObjectSort-Object Cmdlet 會使用這些屬性。

輸入類型的標準或延伸屬性的名稱。 此參數的值可以是相同命令中新增之類型的名稱。

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

指定 AliasPropertyScriptPropertyCodePropertyCodeMethod 成員的額外值。

搭配 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 參數值的字串傳送至 Update-TypeData

輸出

None

此 Cmdlet 不會傳回任何輸出。