Поделиться через


Расширение объектов выходных данных

Можно расширить объекты .NET Framework, возвращаемые командлетами, функциями и скриптами с помощью файлов типов (.ps1xml). Файлы типов — это XML-файлы, позволяющие добавлять свойства и методы в существующие объекты. Например, Windows PowerShell предоставляет файл Types.ps1xml, который добавляет элементы к нескольким существующим объектам .NET Framework. Файл Types.ps1xml находится в каталоге установки Windows PowerShell ($PSHOME). Вы можете создать собственный файл типов для дальнейшего расширения этих объектов или расширения других объектов. При расширении объекта с помощью файла типов любой экземпляр объекта расширяется новыми элементами.

Расширение объекта System.Array

В следующем примере показано, как Windows PowerShell расширяет объект System.Array в файле Types.ps1xml. По умолчанию объекты 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) или в подкаталоге каталога установки.

Чтобы добавить в файл собственные расширенные типы, добавьте элемент типов для каждого объекта, который требуется расширить. В следующих разделах приведены примеры.

После определения собственных расширенных типов используйте один из следующих методов, чтобы сделать расширенные объекты доступными:

  • Чтобы сделать файл расширенных типов доступным для текущего сеанса, используйте командлет Update-TypeData, чтобы добавить новый файл. Если типы будут иметь приоритет над типами, определенными в других файлах типов (включая файл Types.ps1xml), используйте параметр PrependData командлета Update-TypeData.
  • Чтобы сделать файл расширенных типов доступным для всех будущих сеансов, добавьте файл типов в модуль, экспортируйте текущий сеанс или добавьте команду Update-TypeData в профиль Windows PowerShell.

Файлы типов подписи

Файлы типов должны быть цифрово подписаны, чтобы предотвратить изменение, так как XML может включать блоки скриптов. Дополнительные сведения о добавлении цифровых подписей см. в about_Signing

См. также

определение свойств по умолчанию для объектов

определение методов по умолчанию для объектов

определение наборов элементов по умолчанию для объектов

написание командлета Windows PowerShell