PowerShell 控制对象属性的显示


当你创建一个返回自定义对象的函数时,默认情况下没有一个行之有效的方法来控制显示结果。因为PowerShell默认显示所有的属性,当属性超过四个时,以列表显示,否则以表格显示。例如

function Get-SomeResult
{
    $resultset = New-Object PSObject | 
      Select-Object Name, FirstName, ID, Language, Skill
    $resultset.Name = 'Weltner'
    $resultset.FirstName = 'Tobias'
    $resultset.ID = 123
    $resultset.Language = 'PowerShell'
    $resultset.Skill = '5'
    $resultset
} 

输出结果为:

PS C:\> Get-SomeResult


Name      : Weltner
FirstName : Tobias
ID        : 123
Language  : PowerShell
Skill     : 5

但是在PowerShell 3.0中,你可以通过定义类型的参数来决定哪些属性默认可以显示,并且让它只在你的函数中生效。思想是首先将一个新的自定义类型赋值给你要返回的结果,然后通过调用Update-TypeData 来告诉PowerShell默认应当显示哪些属性数据。更改如下:

function Get-SomeResult
{
    $resultset = New-Object PSObject | 
      Select-Object Name, FirstName, ID, Language, Skill
    $resultset.Name = 'Weltner'
    $resultset.FirstName = 'Tobias'
    $resultset.ID = 123
    $resultset.Language = 'PowerShell'
    $resultset.Skill = '5'
    $resultset

    # this section defines the default properties
    # and assigns the returned custom objects the
    # "type" name: myObject. Choose a different one
    # for each type of return object your functions use

    if ($PSVersionTable.PSVersion.Major -ge 3)
    {
        $objectType = 'myObject'
        $resultset.PSTypeNames.Add($objectType)
        if ((Get-TypeData $objectType) -eq $null)
        { 
          $p = 'Name','ID','Language'
          Update-TypeData -TypeName $objectType -DefaultDisplayPropertySet $p 
        }
    }
} 

这样处理以后,继续调用该函数,输出为:

PS> Get-SomeResult

Name                                                     ID Language
----                                                     -- --------
Weltner                                                 123 PowerShell

PS> Get-SomeResult | Select-Object *
Name      : Weltner
FirstName : Tobias
ID        : 123
Language  : PowerShell
Skill     : 5

原文链接:Controlling Object Property Display

×用微信扫描并分享
本文链接: https://www.pstips.net/powershell-controlling-object-property-display.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

电子邮件地址不会被公开。 必填项已用*标注