about_Object_Creation

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

TEMA

about_Object_Creation

DESCRIPCIÓN BREVE

Explica cómo crear objetos en Windows PowerShell®.

DESCRIPCIÓN LARGA

Puede crear objetos en Windows PowerShell y usar los objetos que cree en comandos y scripts.

Hay varias formas de crear objetos:

-- New-Object: el cmdlet New-Object crea una instancia de un objeto COM o de .NET Framework.

-- Tablas hash: a partir de Windows PowerShell 3.0, puede crear objetos partiendo de tablas hash de nombres de propiedad y valores de propiedad.

-- Import-Csv: el cmdlet Import-Csv crea objetos personalizados (PSCustomObject) a partir de los elementos de un archivo CSV. Cada fila es una instancia de objeto y cada columna es una propiedad de objeto.

En este tema se muestran y se describen cada uno de estos métodos.

NEW-OBJECT

El cmdlet New-Object proporciona una manera sólida y coherente de crear objetos nuevos. El cmdlet funciona con casi todos los tipos y en todas las versiones compatibles de Windows PowerShell.

Para crear un objeto nuevo, especifique el tipo de una clase de .NET Framework o un ProgID de un objeto COM.

Por ejemplo, el comando siguiente crea un objeto Version.

      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 más información, consulte el tema de ayuda del cmdlet New-Object.

CREAR OBJETOS A PARTIR DE TABLAS HASH

A partir de Windows PowerShell 3.0, puede crear un objeto partiendo de una tabla hash de propiedades y valores de propiedad.

La sintaxis es la siguiente:

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

Este método solo funciona para las clases que tienen un constructor null, es decir, un constructor sin parámetros. Las propiedades del objeto deben ser públicas y configurables.

CREAR OBJETOS PERSONALIZADOS A PARTIR DE TABLAS HASH

Los objetos personalizados son muy útiles y muy fáciles de crear mediante el método de la tabla hash. Para crear un objeto personalizado, use la clase PSCustomObject, ya que está diseñada específicamente para este propósito.

Los objetos personalizados son una manera excelente de devolver una salida personalizada a partir de una función o script; resultan mucho más útiles que devolver una salida con formato que no se puede volver a formatear o canalizar a otros comandos.

Los comandos de la función Test-Object establecen algunos valores de variable y, a continuación, usan esos valores para crear un objeto personalizado. (Puede ver este objeto en uso en la sección de ejemplo del tema de ayuda de 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}
        }

La salida de esta función es una colección de objetos personalizados con formato de tabla de forma predeterminada.

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

Los usuarios pueden administrar las propiedades de los objetos personalizados, al igual que los objetos estándar.

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

CREAR OBJETOS NO PERSONALIZADOS A PARTIR DE TABLAS HASH

También puede usar las tablas hash para crear objetos para clases no personalizadas. Cuando se crea un objeto para una clase no personalizada, se requiere el nombre completo del espacio de nombres, a menos que la clase se encuentre en el espacio de nombres del sistema. Use solo las propiedades de la clase.

Por ejemplo, el comando siguiente crea un objeto de opción de sesión.

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

Los requisitos de la característica de tabla hash, especialmente el requisito de constructor null, eliminan muchas clases existentes. Sin embargo, la mayoría de las clases de opción de Windows PowerShell están diseñadas para funcionar con esta característica, al igual que otras clases muy útiles, como la clase 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

También puede usar la característica de tabla hash al establecer valores de parámetro. Por ejemplo, el valor del parámetro SessionOption del cmdlet New-PSSession y el valor del parámetro JobTrigger de Register-ScheduledJob puede ser una tabla 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

Puede crear objetos personalizados a partir de los elementos de un archivo CSV. Cuando se usa el cmdlet Import-Csv para importar el archivo CSV, el cmdlet crea un objeto personalizado (PSCustomObject) para cada elemento del archivo. Los nombres de columna son las propiedades del objeto.

Por ejemplo, si importa un archivo CSV de datos de activos del equipo, Import-CSV crea una colección de objetos personalizados a partir de la 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 el cmdlet Get-Member para confirmar el 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

Puede usar los objetos personalizados igual que los objetos estándar.

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

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

Para más información, consulte el tema de ayuda del cmdlet Import-Csv.

VEA TAMBIÉN

about_Objects

about_Methods

about_Properties

about_Pipelines

Get-Member

Import-Csv

New-Object