如何在Powershell中显示其他属性?

时间:2016-12-07 18:10:53

标签: powershell

我有时希望对象的默认输出包含一个我认为有用的附加属性。

例如:

$x = ps - ComputerName server1 | select -First 1
$x | fl
Id      : 880
Handles : 397
CPU     :
Name    : acnamagent

如果我想显示所有这些属性+ MachineName属性怎么办?

$x | select Id,Handles,CPU,Name,MachineName
Id          : 880
Handles     : 397
CPU         :
Name        : acnamagent
MachineName : server1

这有效,但我不想明确地命名所有这些默认属性。

我尝试使用PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames,但我无法使用它。

这可以轻松完成吗?

2 个答案:

答案 0 :(得分:2)

嗯,这取决于你所定义的“容易”。 PowerShell使用XML配置cmdlet的输出(C:\ windows \ systems32 \ windowspowershell \ v1.0 \ DotNetTypes.format.ps1xml)。您创建另一个xml文件(您无法更改默认文件)C:\ windows \ systems32 \ windowspowershell \ v1.0 \ Types.ps1xml。 about_Types.ps1XML

咨询:http://codingbee.net/tutorials/powershell/powershell-changing-a-command-outputs-default-formatting/

编辑:您需要为该任务创建新的PropertySet。请参考以下链接:
https://github.com/DBremen/PowerShellScripts/blob/master/functions/Add-PropertySet.ps1
https://powershellone.wordpress.com/2015/03/06/powershell-propertysets-and-format-views/

在您创建它之后,您可以这样称呼它:

gps | select mypropertyset

答案 1 :(得分:0)

我最终创建了以下函数来完全按照我想要的方式执行:

<#
.Synopsis
    Selects all default properties plus those specified.
.DESCRIPTION
   In case no default properties exist, all are selected
#>
function Select-DefaultPropsPlus {
    [CmdletBinding()]
    [OutputType([PSObject])]

    Param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [PSObject] $InputObject,

        [Parameter(Mandatory = $true, Position = 1)]
        [ValidateNotNullOrEmpty()]
        [string[]] $Property
    )

    Process {
        $selectedProperties = @()

        if (($InputObject | Get-Member -Force).Name -contains "PSStandardMembers") {
            $selectedProperties = $InputObject.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames + $Property
        } else {
            $selectedProperties = *
        }

        $InputObject | Select-Object -Property $selectedProperties
    }
}