Update-TypeData

更新会话中的扩展类型数据。

语法

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>]

说明

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 开始,可以使用 cmdlet 获取当前会话中的扩展类型,使用 Get-TypeDataRemove-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 ,例如,在文件中添加或更改了类型时,可能会这样做。 可以为文件重复上述命令 TypesA.types.ps1xml ,也可以运行 Update-TypeData 不带参数的命令,因为 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 参数指定新属性的名称,使用 MemberType 属性指定 ScriptProperty 类型,使用 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 模块。 该命令通过管道将 module 对象传递给 Update-TypeData cmdlet,该 cmdlet 更新 System.Management.Automation.PSModuleInfo 类型的类型数据以及从该类型派生的类型,例如在命令中使用 ListAvailable 参数时返回的 ModuleInfoGrouping 类型Get-Module

命令 Update-TypeDataSupportsUpdatableHelp 脚本属性添加到所有导入的模块。 Value 参数的值是一个脚本,如果填充$False模块的 HelpInfoUri 属性,则返回 $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-List则这些属性由 、 Format-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

指定类型的一个或多个属性。 如果未指定其他属性, Group-Object 则 和 Sort-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 不返回任何输出。