about_Object_Creation

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

ARGOMENTO

about_Object_Creation

DESCRIZIONE BREVE

Illustra come creare oggetti in Windows PowerShell®.

DESCRIZIONE LUNGA

È possibile creare oggetti in Windows PowerShell e utilizzarli in comandi e script.

Esistono diversi modi per creare oggetti:

-- New-Object: il cmdlet New-Object crea un'istanza di un oggetto .NET Framework o COM.

-- Tabelle hash: a partire da Windows PowerShell 3.0, è possibile creare oggetti dalle tabelle hash dei nomi e dei valori delle proprietà.

-- Import-Csv: il cmdlet Import-Csv crea oggetti personalizzati (PSCustomObject) dagli elementi in un file CSV. Ogni riga è un'istanza dell'oggetto e ogni colonna è una proprietà dell'oggetto.

In questo argomento verrà illustrato ognuno di questi metodi.

NEW-OBJECT

Il cmdlet New-Object rappresenta uno strumento efficace e coerente per creare nuovi oggetti. Il cmdlet funziona con quasi tutti i tipi e in tutte le versioni supportate di Windows PowerShell.

Per creare un nuovo oggetto, specificare il tipo di una classe .NET Framework o un ProgID di un oggetto COM.

Ad esempio, il comando seguente crea un oggetto 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
          ...
      

Per altre informazioni, vedere l'argomento della Guida sul cmdlet New-Object.

CREARE OGGETTI DA TABELLE HASH

A partire da Windows PowerShell 3.0, è possibile creare un oggetto da una tabella hash di proprietà e valori delle proprietà.

La sintassi è la seguente:

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

Questo metodo funziona solo per le classi che dispongono di un costruttore null, ovvero un costruttore senza parametri. Le proprietà dell'oggetto devono essere pubbliche e impostabili.

CREARE OGGETTI PERSONALIZZATI DA TABELLE HASH

Gli oggetti personalizzati sono molto utili e facili da creare mediante il metodo delle tabelle hash. Per creare un oggetto personalizzato, usare la classe PSCustomObject, una classe progettata appositamente per questo scopo.

Gli oggetti personalizzati sono un ottimo modo per restituire un output personalizzato da una funzione o da uno script. Rappresentano uno strumento notevolmente più utile rispetto alla restituzione di un output formattato che non è possibile riformattare o inviare tramite pipe ad agli altri comandi.

I comandi nella funzione Test-Object impostano alcuni valori per le variabili e quindi usano tali valori per creare un oggetto personalizzato. È possibile visualizzare questo oggetto in uso nella sezione di esempio dell'argomento della Guida per il 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}
        }

L'output di questa funzione è una raccolta di oggetti personalizzati nel formato di una tabella per impostazione predefinita.

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

Gli utenti possono gestire le proprietà degli oggetti personalizzati esattamente come avviene con gli oggetti standard.

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

CREARE OGGETTI NON PERSONALIZZATI DA TABELLE HASH

È anche possibile usare tabelle hash per creare oggetti per le classi non personalizzate. Quando si crea un oggetto per una classe non personalizzata, è necessario il nome dello spazio dei nomi completo a meno che la classe non si trovi nello spazio dei nomi System. Usare solo le proprietà della classe.

Ad esempio, il comando seguente crea un oggetto di opzioni della sessione.

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

I requisiti della funzionalità relativa alle tabelle hash, soprattutto quello del costruttore null, eliminano molte classi esistenti. Tuttavia, la maggior parte delle classi di opzioni di Windows PowerShell è progettata per usare questa funzionalità, nonché altre classi molto utile (ad esempio la 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

È anche possibile usare la funzionalità relativa alle tabelle hash quando si impostano i valori dei parametri. Ad esempio, il valore del parametro SessionOption del cmdlet New-PSSession e il valore del parametro JobTrigger di Register-ScheduledJob possono essere una tabella 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

È possibile creare oggetti personalizzati dagli elementi di un file CSV. Quando si usa il cmdlet Import-Csv per importare il file CSV, il cmdlet crea un oggetto personalizzato (PSCustomObject) per ogni elemento nel file. I nomi delle colonne sono le proprietà dell'oggetto.

Ad esempio, se si importa un file CSV di dati di risorse del computer, Import-CSV crea una raccolta di oggetti personalizzati dall'input.

       #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

Usare il cmdlet Get-Member per confermare il tipo di oggetto.

       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

È possibile usare gli oggetti personalizzati esattamente come gli oggetti standard.

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

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

Per altre informazioni, vedere l'argomento della Guida sul cmdlet Import-Csv.

VEDERE ANCHE

about_Objects

about_Methods

about_Properties

about_Pipelines

Get-Member

Import-Csv

New-Object