2012-03-28 15 views
7

Mi piacerebbe essere in grado di impostare il rendering di testo predefinito di un oggetto PSO che creo. Ad esempio, Vorrei questo codice:Come impostare il ToString() predefinito su un PSObject creato localmente?

new-object psobject -property @{ name = 'bob'; job = 'janitor' } 

che attualmente Risulterà:

name job 
---- --- 
bob janitor 

all'uscita invece questo:

name job 
---- --- 
bob he is a janitor, he is 

Vale a dire collegare blocco di script alla ToString del PSObject() che fa proprio questo:

{ 'he is a {0}, he is' -f $job } 

non ho bisogno di fare un add-type con un po 'C# per il tipo, no? Spero di no. Realizzo molti psobject locali e mi piacerebbe spargerli su di essi per rendere il loro output più piacevole, ma se è un sacco di codice probabilmente non ne varrà la pena.

risposta

14

Utilizzare la Add-Member cmdlet per eseguire l'override del metodo predefinito ToString:

$pso = new-object psobject -property @{ name = 'bob'; job = 'janitor' } 
$pso | add-member scriptmethod tostring { 'he is a {0}, he is' -f $this.job } -force 
$pso.tostring() 
+0

Wow, è davvero così semplice. Grazie. – scobi

Problemi correlati