Dalla PowerShell versione 3 è possibile creare degli oggetti custom in modo semplice tramite l'uso delle hash table e cast ad oggetto:

PowerShell

$obj = [PSCustomObject]@{Name="Test"; Positon=1; Date=(Get-Date)}
Il trucco è quello di creare un hash table @{} valorizzato con i nomi e valori che le proprietà devono avere

PowerShell

@{Name="Test"; Positon=1; Date=(Get-Date)}
poi fare un cast ad un oggetto

PowerShell

[PSCustomObject]@{Name="Test"; Positon=1; Date=(Get-Date)}
l'oggetto PSCustomObject è un oggetto vuoto pensato per questo utilizzo.
I nomi dalle proprietà sono separati dai valori tramite un simbolo uguale (=), mentre le proprietà sono separate tra di loro da un punto e virgola (;)
Il risultato a video è questo:

Text

Name Positon Date
---- ------- ----
Test       1 04/02/2016 22:18:44

Se creo una serie di oggetti, ad esempio in un ciclo ForEach-Object (%), in realtà sto creando una collection di oggetti. Questi saranno disponibili in output e potranno essere passati, tramite la pipe (|), in input al successivo comando.
In questo esempio leggo una directory e mi faccio restituire un oggetto custom che ha 2 proprietà, il nome del file (FileName) e la sua lunghezza (FileLen):

PowerShell

$d = dir | %{ $l=$_.Name.length; [PSCustomObject]@{FileName=$_.Name; FileLen=$l} }
$d
da un risultato simile a questo

Text

FileName                                                            FileLen
--------                                                            -------
Blocchi appunti di OneNote                                               26
Fiddler2                                                                  8
File di Outlook                                                          15
File ricevuti                                                            13
Forme personalizzate                                                     20
Graphics                                                                  8
...
poi posso ad esempio filtrare con una Where-Object (punto di domanda) per selezionare solo quelli che hanno il nome file più lungo di 30 caratteri:

PowerShell

$d | ? {$_.FileLen -gt 30 }
da come risultato:

Text

FileName                                                            FileLen
--------                                                            -------
Modelli di Office personalizzati                                         32
RemoteDesktopConnections.rdg.old                                         32
SpecificheSistemadiintegrazionedocumentale (DRAFT -1 20141201).docx      67

Alternativa

In alternativa posso creare un oggetto tramite New-Object:

PowerShell

# creo un hash table con le proprietà
$props = @{Name="Test"; Positon=1; Date=(Get-Date)}

# volendo posso aggiungere altre proprietà
$props.Valore1 = "AA";
$props["Valore2"] = "BB"

# lo converto in oggetto
$obj = New-Object -TypeName PSObject -Property $props

# lo visualizzo
$obj | Select Name, Position, Date, Valore1, Valore2 | format-Table
da come risultato

Text

Name Position Date                Valore1 Valore2
---- -------- ----                ------- -------
Test          04/02/2016 22:38:44 AA      BB
Tags:
Esempi225 PowerShell201
Potrebbe interessarti anche: