add-member用于对Write-Output进行格式化添加

时间:2015-02-20 08:51:17

标签: powershell

目前,打印Get-Process对象会产生

PS > $p = Get-Process procexp
PS > $p
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    293      10    10660       8060   122   163.19    196 procexp

我想要打印一个包含Datetime值的干净表。 有很多方法可以做到这一点。我试图通过向$p添加属性来实现此目的。我想要它看起来像(请注意右侧的新列):

PS > $p = Get-Process procexp
PS > $d = Get-Date
PS > $p | Add-Member -MemberType NoteProperty -Name DateTime -Value $d.DateTime
PS > $p
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName Datetime
-------  ------    -----      ----- -----   ------     -- ----------- --------
    293      10    10660       8060   122   163.19    196 procexp     Friday February 20, 2015 00:20:00

不幸的是,列DateTime无法打印。调用Add-Member$p打印到stdout的内容没有影响。

有没有人知道如何添加一个对象成员,以便它自动打印在这样的表中?

1 个答案:

答案 0 :(得分:0)

$ p |选择名称,句柄,NPM,@ {Label ='Date';表达式= {Get-date}} 你可以添加| ft -AutoSize最后有一个好看的表,而且你必须添加你想要显示的所有属性。

查看get-process的值是如何形成的,有关基于数据类型格式化数据的所有信息都可以在以下位置找到:C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

你可以在Select或Format-XXX comandlets中玩哈希表,在这种特殊情况下,我已经为PS中的每一行添加了当前日期示例:@ {Label ='VM';表达式= {$ _.VM / 1Mb}} Select中的此表达式将以MegaBytes显示VM。

干杯 /安东