共用方式為


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

命令 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-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

指定屬性或方法的名稱。

使用此參數與 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 不會傳回任何輸出。