扩展输出对象

可以使用类型文件(.ps1xml)扩展 cmdlet、函数和脚本返回的 .NET Framework 对象。 类型文件是基于 XML 的文件,可用于向现有对象添加属性和方法。 例如,Windows PowerShell 提供 Types.ps1xml 文件,该文件将元素添加到多个现有的 .NET Framework 对象。 Types.ps1xml 文件位于 Windows PowerShell 安装目录($PSHOME)。 可以创建自己的类型文件来进一步扩展这些对象或扩展其他对象。 使用类型文件扩展对象时,该对象的任何实例都使用新元素进行扩展。

扩展 System.Array 对象

以下示例演示 Windows PowerShell 如何扩展 Types.ps1xml 文件中的 System.Array 对象。 默认情况下,System.Array 对象具有一个列出数组中对象的 Length 属性。 但是,由于名称“length”未明确描述该属性,Windows PowerShell 会添加 Count 别名属性,该属性显示与 Length 属性相同的值。 以下 XML 将 Count 属性添加到 System.Array 类型。

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>Length</ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

若要查看此新别名属性,请对任何数组使用 Get-Member 命令,如以下示例所示。

Get-Member -InputObject (1,2,3,4)

该命令返回以下结果。

Name           MemberType    Definition
----           ----------    ----------
Count          AliasProperty Count = Length
Address        Method        System.Object& Address(Int32 )
Clone          Method        System.Object Clone()
CopyTo         Method        System.Void CopyTo(Array array, Int32 index):
Equals         Method        System.Boolean Equals(Object obj)
Get            Method        System.Object Get(Int32 )
...
Length         Property      System.Int32 Length {get;}

可以使用 Count 属性或 Length 属性来确定数组中的对象数。 例如:

PS> (1, 2, 3, 4).Count
4
PS> (1, 2, 3, 4).Length
4

自定义类型文件

若要创建自定义类型文件,请首先复制现有类型文件。 新文件可以具有任何名称,但它必须具有 .ps1xml 文件扩展名。 复制文件时,可以将新文件放置在 Windows PowerShell 可访问的任何目录中,但将文件放置在 Windows PowerShell 安装目录($PSHOME)或安装目录的子目录中非常有用。

若要将自己的扩展类型添加到文件中,请为要扩展的每个对象添加一个 types 元素。 以下主题提供了示例。

  • 有关添加属性和属性集的详细信息,请参阅 扩展属性

  • 有关添加方法的详细信息,请参阅 扩展方法

  • 有关添加成员集的详细信息,请参阅 扩展成员集

定义自己的扩展类型后,使用以下方法之一使扩展对象可用:

  • 若要使扩展类型文件可用于当前会话,请使用 Update-TypeData cmdlet 添加新文件。 如果希望类型优先于其他类型的文件中定义的类型(包括 Types.ps1xml 文件),请使用 Update-TypeData cmdlet 的 PrependData 参数。
  • 若要使扩展类型文件可供将来的所有会话使用,请将类型文件添加到模块、导出当前会话或将 Update-TypeData 命令添加到 Windows PowerShell 配置文件。

签名类型文件

类型文件应进行数字签名以防止篡改,因为 XML 可以包含脚本块。 有关添加数字签名的详细信息,请参阅 about_Signing

另请参阅

定义对象的默认属性

定义对象的默认方法

定义对象的默认成员集

编写 Windows PowerShell Cmdlet