about_Object_Creation

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0

TÓPICO

about_Object_Creation

DESCRIÇÃO BREVE

Explica como criar objetos em Windows PowerShell®.

DESCRIÇÃO LONGA

Você pode criar objetos em Windows PowerShell e usar os objetos criados em comandos e scripts.

Há várias maneiras de criar objetos:

-- New-Object: O cmdlet New-Object cria uma instância de um objeto .NET Framework ou COM.

– Tabelas de hash: A partir de Windows PowerShell 3.0, você pode criar objetos de tabelas de hash de nomes de propriedades e valores de propriedade.

-- Import-Csv: O cmdlet Import-Csv cria objetos personalizados (PSCustomObject) dos itens em um arquivo CSV. Cada linha é uma instância do objeto e cada coluna é uma propriedade de objeto.

Este tópico demonstrará e discutirá cada um desses métodos.

NEW-OBJECT

O cmdlet New-Object fornece uma maneira eficiente e consistente de se criar novos objetos. O cmdlet funciona com quase todos os tipos e em todas as versões com suporte do Windows PowerShell.

Para criar um novo objeto, especifique o tipo de uma classe do .NET Framework ou ProgID de um objeto COM.

Por exemplo, o comando a seguir cria um objeto de versão.

      PS C:\>$v = New-Object -TypeName System.Version -ArgumentList 2.0.0.1
      PS C:\>$v

      Major  Minor  Build  Revision
      -----  -----  -----  --------
      2      0      0      1

      PS C:\>$v | Get-Member

          TypeName: System.Version
          ...
      

Para obter mais informações, consulte o tópico de ajuda para o cmdlet New-Object.

CRIAR OBJETOS DE TABELAS DE HASH

A partir de Windows PowerShell 3.0, você pode criar um objeto por meio de uma tabela de hash de propriedades e valores de propriedade.

A sintaxe é a seguinte:

        [<class-name>]@{<property-name>=<property-value>;<property-name>=<property-value>}

Esse método funciona somente para classes que têm um construtor nulo, ou seja, um construtor que não tem parâmetros. As propriedades do objeto devem ser públicas e configuráveis.

CRIAR OBJETOS PERSONALIZADOS A PARTIR DE TABELAS DE HASH.

Objetos personalizados são muito úteis e são muito fáceis de criar usando o método de tabela de hash. Para criar um objeto personalizado, use a classe PSCustomObject, uma classe criada especificamente para essa finalidade.

Objetos personalizados são uma excelente maneira de retornar a saída personalizada de uma função ou um script; muito mais útil que retornar a saída formatada que não pode ser reformatada ou conectada a outros comandos.

Os comandos na função Test-Object definem alguns valores de variáveis e, em seguida, usam esses valores para criar um objeto personalizado. (Você pode ver esse objeto em uso na seção de exemplo do tópico da ajuda do cmdlet Update-Help.)

        function Test-Object
        {    $ModuleName = "PSScheduledJob" 
             $HelpCulture = "en-us"
             $HelpVersion = "3.1.0.0"
             [PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
    
             $ModuleName = "PSWorkflow" 
             $HelpCulture = "en-us"
             $HelpVersion = "3.0.0.0"
             [PSCustomObject]@{"ModuleName"=$ModuleName; "UICulture"=$HelpCulture; "Version"=$HelpVersion}
        }

A saída dessa função é uma coleção de objetos personalizados, formatada como uma tabela por padrão.

        PS C:\>Test-Object
        
        ModuleName        UICulture      Version
        ---------         ---------      -------
        PSScheduledJob    en-us          3.1.0.0
        PSWorkflow        en-us          3.0.0.0

Os usuários podem gerenciar as propriedades de objetos personalizados, assim como fazem com objetos padrão.

       PS C:\>(Test-Object).ModuleName
        PSScheduledJob
        PSWorkflow

CRIAR OBJETOS NÃO PERSONALIZADOS A PARTIR DE TABELAS DE HASH

Você também pode usar tabelas de hash para criar objetos de classes não-personalizadas. Quando você cria um objeto de uma classe não-personalizada, o nome completo do namespace é necessário, a menos que a classe esteja no sistema namespace. Use somente as propriedades da classe.

Por exemplo, o comando a seguir cria um objeto de opção de sessão.

       [System.Management.Automation.Remoting.PSSessionOption]@{IdleTimeout=43200000; SkipCnCheck=$True}

Os requisitos do recurso de tabela de hash, especialmente o requisito de construtor nulo, eliminam muitas classes existentes. No entanto, a maioria das Windows PowerShell classes de opção são projetadas para trabalhar com esse recurso, bem como com outras classes muito úteis, como a classe ScheduledJobTrigger.

       [Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger]@{Frequency="Daily";At="15:00"}    

       Id         Frequency       Time                   DaysOfWeek              Enabled
       --         ---------       ----                   ----------              -------
       0          Daily           6/6/2012 3:00:00 PM                            True

Você também pode usar o recurso de tabela de hash ao definir os valores de parâmetro. Por exemplo, o valor do parâmetro SessionOption do cmdlet New-PSSession e o valor do parâmetro do registro ScheduledJob JobTrigger pode ser uma tabela de hash.

       New-PSSession -ComputerName Server01 -SessionOption @{IdleTimeout=43200000; SkipCnCheck=$True}
       Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{Frequency="Daily";At="15:00"}    

IMPORT-CSV

Você pode criar objetos personalizados a partir de itens em um arquivo CSV. Quando você usa o cmdlet Import-Csv para importar o arquivo CSV, o cmdlet cria um objeto personalizado (PSCustomObject) para cada item no arquivo. Os nomes de coluna são as propriedades do objeto.

Por exemplo, se você importar um arquivo CSV de dados do computador ativo, o Import-CSV cria uma coleção de objetos personalizados a partir da entrada.

       #In Servers.csv
       AssetID, Name, OS, Department
       003, Server01, Windows Server 2012, IT
       103, Server33, Windows 7, Marketing
       212, Server35, Windows 8, Finance

       PS C:\>$a = Import-Csv Servers.csv
       PS C:\>$a
    
       AssetID        Name           OS                    Department
       -------        ----           --                    ----------
       003            Server01       Windows Server 2012   IT
       103            Server33       Windows 7             Marketing
       212            Server35       Windows 8             Finance

Use o cmdlet Get-Member para confirmar o tipo de objeto.

       PS C:\>$a | Get-Member

          TypeName: System.Management.Automation.PSCustomObject
   
       Name        MemberType   Definition
       ----        ----------   ----------
       Equals      Method       bool Equals(System.Object obj)
       GetHashCode Method       int GetHashCode()
       GetType     Method       type GetType()
       ToString    Method       string ToString()
       AssetID     NoteProperty System.String AssetID=003
       Department  NoteProperty System.String Department=IT
       Name        NoteProperty System.String Name=Server01
       OS          NoteProperty System.String OS=Windows Server 2012

Você pode usar os objetos personalizados, assim como faria com objetos padrão.

       PS C:\>$a | where {$_.OS -eq "Windows 8"}

       AssetID        Name           OS                    Department
       -------        ----           --                    ----------
       212            Server35       Windows 8             Finance

Para obter mais informações, consulte o tópico de ajuda para o cmdlet Import-Csv.

CONSULTE TAMBÉM

about_Objects

about_Methods

about_Properties

about_Pipelines

Get-Member

Import-Csv

New-Object