Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O PowerShell usa seu objeto PSObject para estender os tipos de objetos de duas maneiras. Primeiro, o objeto PSObject fornece uma maneira de mostrar diferentes exibições de tipos de objeto específicos. Isso é conhecido como mostrar uma visão adaptada de um objeto. Em segundo lugar, o objeto PSObject fornece uma maneira de adicionar membros ao objeto existente. Juntos, ao encapsular um objeto existente, conhecido como objeto base, o objeto PSObject fornece um ETS (sistema de tipo estendido) que os desenvolvedores de scripts e cmdlets podem usar para manipular objetos .NET dentro do shell.
Problemas de desenvolvimento de cmdlets e scripts
O RCLE resolve duas questões fundamentais:
Primeiro, alguns objetos .NET não têm o comportamento padrão necessário para atuar como os dados entre cmdlets.
- Alguns objetos .NET são objetos "meta" (por exemplo: objetos WMI, objetos ADO e objetos XML) cujos membros descrevem os dados que contêm. No entanto, em um ambiente de scripting, são os dados contidos que são mais interessantes, não a descrição dos dados contidos. O ETS resolve esse problema introduzindo a noção de adaptadores que adaptam o objeto .NET subjacente para ter a semântica padrão esperada.
- Alguns membros do .NET Object são nomeados inconsistentemente, fornecem um conjunto insuficiente de membros públicos ou fornecem capacidade insuficiente. O ETS resolve esse problema introduzindo a capacidade de estender o objeto .NET com membros adicionais.
Em segundo lugar, a linguagem de script do PowerShell é sem tipo, na medida em que uma variável não precisa ser declarada de um tipo específico. Ou seja, as variáveis que um desenvolvedor de script cria são, por natureza, sem tipo. No entanto, o sistema PowerShell é "orientado por tipo" na medida em que depende de ter um nome de tipo para operar para operações básicas, como resultados de saída ou classificação.
Portanto, um desenvolvedor de script deve ter a capacidade de declarar o tipo de uma de suas variáveis e construir seu próprio conjunto de "objetos" digitados dinamicamente que contêm propriedades e métodos e podem participar do sistema controlado por tipo. O ETS resolve esse problema fornecendo um objeto comum para a linguagem de script que tem a capacidade de declarar seu tipo dinamicamente e adicionar membros dinamicamente.
Fundamentalmente, o ETS resolve o problema mencionado anteriormente fornecendo a objeto PSObject, que atua como a base de todo o acesso a objetos da linguagem de script e fornece uma abstração padrão para o desenvolvedor do cmdlet.
Desenvolvedores de cmdlets
Para os desenvolvedores de cmdlets, o ETS fornece o seguinte suporte:
- As abstrações para trabalhar contra objetos de forma genérica usando o PSObject objeto. O ETS também fornece a capacidade de perfurar essas abstrações, se necessário.
- Os mecanismos para criar um comportamento padrão para formatação, classificação, serialização e outras manipulações do sistema de seu tipo de objeto usando um conjunto bem conhecido de membros estendidos.
- O significa operar contra qualquer objeto usando a mesma semântica que a linguagem de script usando um objeto LanguagePrimitives.
- O meio de "digitar" dinamicamente uma tabela de hash para que o resto do sistema possa operar contra ela de forma eficaz.
Programadores de Scripts
Para os desenvolvedores de scripts, o ETS fornece o seguinte suporte:
- A capacidade de fazer referência a qualquer tipo de objeto subjacente usando a mesma sintaxe (
$a.x). - A capacidade de acessar além da abstração fornecida pelo objeto PSObject (como acessar apenas membros adaptados ou acessar o próprio objeto base).
- A capacidade de definir membros conhecidos que controlam a formatação, classificação, serialização e outras manipulações de uma instância ou tipo de objeto.
- O significa nomear um objeto como um tipo específico e, assim, controlar a herança de seus membros baseados em tipo.
- A capacidade de adicionar, remover e modificar membros estendidos.
- A capacidade de manipular o PSObject próprio objeto, se necessário.
A classe PSObject
O objeto PSObject é a base de todo o acesso a objetos da linguagem de script e fornece uma abstração padrão para o desenvolvedor do cmdlet. Ele contém um objeto base (um objeto .NET) e quaisquer membros de instância (membros, especificamente membros estendidos, que estão presentes em uma instância de objeto específica, embora não necessariamente em outros objetos do mesmo tipo). Dependendo do tipo do objeto base, o objeto PSObject também pode fornecer acesso implícito e explícito a membros adaptados, bem como a quaisquer membros estendidos baseados em tipo.
O objeto PSObject fornece os seguintes mecanismos:
- A capacidade de construir um PSObject com ou sem um objeto-base.
- A capacidade de acessar todos os membros de cada objeto PSObject construído por meio de um algoritmo de pesquisa comum e a capacidade de substituir esse algoritmo quando necessário.
- A capacidade de obter e definir os nomes de tipo dos objetos PSObject construídos para que scripts e cmdlets possam fazer referência a objetos PSObject semelhantes pelo mesmo nome-tipo, independentemente do tipo de seu objeto-base.
Como construir um PSObject
A lista a seguir descreve maneiras de criar um objeto PSObject:
- Chamar o PSObject .#ctor construtor cria um novo PSObject objeto com um objeto base de PSCustomObject. Um objeto-base desse tipo indica que o objeto PSObject não tem nenhum objeto-base significativo. No entanto, um objeto PSObject com esse tipo de objeto base fornece um pacote de propriedades que os desenvolvedores de cmdlets podem considerar útil adicionando membros estendidos.
Os desenvolvedores também podem especificar o nome do tipo de objeto, o que permite que esse objeto compartilhe seus membros estendidos com outros PSObject objetos do mesmo nome.
Chamar o PSObject .#ctor(System.Object) construtor cria um novo PSObject objeto com um objeto base do tipo System.Object.
Nesse caso, o nome do tipo para o objeto criado é uma coleção da hierarquia de derivação do objeto-base. Por exemplo, o nome do tipo para o PSObject que contém um objeto base ProcessInfo incluiria os seguintes nomes:
- System.Diagnostics.Process
- System.ComponentModel.Component
- System.MarshalByRefObject
- System.Object
Chamando o PSObject . AsPSObject(System.Object) método cria um novo PSObject objeto com base em um objeto fornecido.
Se o objeto fornecido for do tipo System.Object, o objeto fornecido será usado como o objeto base para o novo objeto PSObject. Se o objeto fornecido já for um objeto PSObject, o objeto fornecido será retornado como está.
Membros base, adaptados e estendidos
Conceitualmente, o ETS usa os seguintes termos para mostrar a relação entre os membros originais do objeto-base e os membros adicionados pelo PowerShell. Para obter mais informações sobre os tipos específicos de membros usados pelo objeto PSObject, consulte classe PSObject.
Membros do objeto-base
Se o objeto-base for especificado ao construir os objetos PSObject, os membros do objeto-base serão disponibilizados por meio da propriedade Members.
Membros adaptados
Quando um objeto-base é um metaobjeto, que contém dados de forma genérica cujas propriedades "descrevem" seus dados contidos, o ETS adapta esses objetos a uma exibição que permite acesso direto aos dados por meio de membros adaptados do objeto PSObject. Membros adaptados e membros de objeto base são acessados através da propriedade Membros.
Membros alargados
Além dos membros disponibilizados a partir do objeto-base ou daqueles membros adaptados criados pelo PowerShell, um PSObject também pode definir membros estendidos que estendem o objeto-base original com informações adicionais que são úteis no ambiente de script.
Por exemplo, todos os cmdlets principais fornecidos pelo PowerShell, como os cmdlets Get-Content e Set-Content, usam um parâmetro Path. Para garantir que esses cmdlets, e outros, possam funcionar em objetos de diferentes tipos, um membro Path pode ser adicionado a esses objetos para que todos eles declarem suas informações de uma maneira comum. Esse membro Path estendido garante que os cmdlets possam funcionar em todos esses tipos, mesmo que a classe base possa não ter um membro Path.
Membros estendidos, membros adaptados e membros de objeto base são acessados por meio da propriedade Membros.