Extending Output Objects (Expandir Objetos de Resultado)

Pode estender a .NET Framework objetos que são devolvidos por cmdlets, funções e scripts utilizando ficheiros de tipos (.ps1xml). Os ficheiros tipos são ficheiros baseados em XML que permitem adicionar propriedades e métodos aos objetos existentes. Por exemplo, Windows PowerShell fornece o ficheiro Types.ps1xml, que adiciona elementos a vários objetos .NET Framework existentes. O ficheiro Types.ps1xml está localizado no diretório de instalação Windows PowerShell ( $pshome ). Pode criar o seu próprio ficheiro de tipos para prolongar ainda mais esses objetos ou para estender outros objetos. Quando se estende um objeto utilizando um ficheiro tipo, qualquer instância do objeto é estendida com os novos elementos.

Ampliação do objeto System.Array

O exemplo a seguir mostra como Windows PowerShell estende o objeto System.Array no ficheiro Types.ps1xml. Por predefinição, os objetos System.Array têm uma Length propriedade que lista o número de objetos na matriz. No entanto, como o nome "comprimento" não descreve claramente o imóvel, Windows PowerShell adiciona a Count propriedade de alias, que exibe o mesmo valor que o Length imóvel. O seguinte XML adiciona a Count propriedade ao tipo System.Array.

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

Para ver esta nova propriedade de pseudónimos, utilize um comando Get-Member em qualquer matriz, como mostra o exemplo seguinte.

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

O comando retorna os seguintes resultados.

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;}

Você pode usar a Count propriedade ou a propriedade para determinar Length quantos objetos estão em uma matriz. Por exemplo:

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

Ficheiros de tipos personalizados

Para criar um ficheiro de tipos personalizados, comece por copiar um ficheiro de tipos existente. O novo ficheiro pode ter qualquer nome, mas deve ter uma extensão de nome de ficheiro .ps1xml. Ao copiar o ficheiro, pode colocar o novo ficheiro em qualquer diretório acessível a Windows PowerShell, mas é útil colocar os ficheiros no diretório de instalação Windows PowerShell ( $pshome ) ou num subdiretório do diretório de instalação.

Para adicionar os seus próprios tipos estendidos ao ficheiro, adicione um elemento de tipo para cada objeto que pretende estender. Os seguintes tópicos dão exemplos.

Depois de definir os seus próprios tipos estendidos, utilize um dos seguintes métodos para disponibilizar os seus objetos estendidos:

  • Para disponibilizar o ficheiro dos seus tipos alargados à sessão atual, utilize o cmdlet Update-TypeData para adicionar o novo ficheiro. Se pretender que os seus tipos prevaleçam sobre os tipos definidos em outros tipos de ficheiros (incluindo o ficheiro Types.ps1xml), utilize o PrependData parâmetro do cmdlet Update-TypeData.
  • Para disponibilizar o ficheiro de tipos alargados a todas as sessões futuras, adicione o ficheiro dos tipos a um módulo, exporte a sessão atual ou adicione o comando Update-TypeData ao seu perfil de Windows PowerShell.

Ficheiros de tipos de assinatura

Os ficheiros de tipos devem ser assinados digitalmente para evitar a adulteração, porque o XML pode incluir blocos de script. Para obter mais informações sobre a adição de assinaturas digitais, consulte about_Signing

Consulte também

Definição de propriedades padrão para objetos

Defining Default Methods for Objects (Predefinir Métodos para Objetos)

Defining Default Member Sets for Objects (Predefinir Conjuntos de Membros para Objetos)

Writing a Windows PowerShell Cmdlet (Escrever um Cmdlet do Windows PowerShell)