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
Potrebbe interessarti anche: