如何为New-Object建议首选格式?

时间:2013-07-11 23:50:41

标签: powershell

我正在PowerShell创建新对象,如下所示:

# create new object
$res = New-Object PSObject

# assign properties
$res | Add-Member Noteproperty -Name Passed -Value $Passed
$res | Add-Member Noteproperty -Name Duration -Value $Duration
$res | Add-Member Noteproperty -Name Name -Value $TestCase.Name
$res | Add-Member Noteproperty -Name Message -Value $Message

# return result
$res

当我调用此代码时,$res结果项以表格格式显示。我也可以通过添加| Format-Table来强制使用格式。

是否可以构建新对象,以便在显示时强制使用特定的默认格式? (即:我可以通过在对象上添加一些属性或元数据来强制Format-TableFormat-List吗?)

1 个答案:

答案 0 :(得分:5)

我知道获取类型的标准格式的唯一方法是创建和加载格式文件(请参阅about_Format.ps1xml)。格式文件根据对象的类型名称“决定”使用哪种格式。因此,在创建自定义对象时,请务必为其指定自定义类型名称,以便为其编写自定义视图:

$res = New-Object PSObject
$res.PSTypeNames.Insert(0, 'Result')

然后,在您的格式文件中,使用Result作为类型名称。使用比Results更好的名称可能是一个好主意。

格式文件必须先加载才能使用。如果格式文件是模块的一部分,这很容易,如果它是一个松散的格式文件,你的脚本将单独加载,那就更容易了。

您也可以编写自己的格式函数,在内部使用Format-Table和/或Format-List,以您想要的方式显示对象,例如。

function Format-TestCaseResult
{
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        $InputObject
    )
    process
    {
        $InputObject | Format-Table -AutoSize
    }
}