如何在本地创建的PSObject上设置默认的ToString()?

sco*_*obi 8 powershell

我希望能够设置我创建的PSObject的默认文本呈现.例如,我想要这个代码:

new-object psobject -property @{ name = 'bob'; job = 'janitor' }
Run Code Online (Sandbox Code Playgroud)

目前输出这个:

name  job
----  ---
bob   janitor
Run Code Online (Sandbox Code Playgroud)

改为输出:

name  job
----  ---
bob   he is a janitor, he is
Run Code Online (Sandbox Code Playgroud)

即将脚本块附加到PSObject的ToString(),它就是这样做的:

{ 'he is a {0}, he is' -f $job }
Run Code Online (Sandbox Code Playgroud)

我不需要add-type为类型做一些C#,是吗?我希望不是.我制作了许多本地psobjects,并希望将它们分散到它们上以帮助使它们的输出更好,但如果它是很多代码,它可能不值得.

Sha*_*evy 15

使用Add-Membercmdlet覆盖默认的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()
Run Code Online (Sandbox Code Playgroud)