about_Object_Creation
Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.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