2012-03-28 75 views
7

我希望能夠設置我創建的PSObject的默認文本渲染。例如,我想這樣的代碼:如何在本地創建的PSObject上設置默認的ToString()?

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

目前輸出該:

name job 
---- --- 
bob janitor 

,而不是輸出此:

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

即附加腳本塊到PSObject的ToString(),僅僅做到這一點:

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

我不需要爲類型做了一些C#的add-type,是吧?我希望不是。我製作了大量本地psobjects,並希望將它們分散到字符串上,以幫助使它們的輸出更加美觀,但如果它有很多代碼,它可能不值得。

回答

14

使用Add-Member cmdlet來替代默認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

哇它真的就是這麼簡單。謝謝。 – scobi 2012-03-28 19:09:06

相關問題