如何向“格式表”视图添加新的NoteProperty?

时间:2019-07-12 16:56:33

标签: powershell

我正在玩Get-NetTCPConnection来代替netstat,我正在尝试提出-b标志的解决方案。

  

-b显示创建每个连接或侦听端口所涉及的可执行文件。

到目前为止,我有Add-Member这样的人

Get-NetTCPConnection | %{ Add-Member -InputObject $_ -NotePropertyMembers @{OwningProcessName=(Get-Process -PID $_.OwningProcess).Name} -PassThru }

似乎将NoteProperty添加到对象中。

PS> Get-NetTCPConnection | %{ Add-Member -InputObject $_ -NotePropertyMembers @{OwningProcessName=(Get-Process -PID $_.OwningProcess).Name} -PassThru } | Get-Member -Name OwningProcessName


   TypeName: Microsoft.Management.Infrastructure.CimInstance#ROOT/StandardCimv2/MSFT_NetTCPConnection

Name              MemberType   Definition
----              ----------   ----------
OwningProcessName NoteProperty string OwningProcessName=msedge

但是,我似乎无法使该列连同所有默认属性一起显示在Format-Table中。理想情况下,我希望在不重复默认属性的整个列表的情况下添加它。

我在最大化窗口中运行了此命令:

PS> Get-NetTCPConnection | %{ Add-Member -InputObject $_ -NotePropertyMembers @{OwningProcessName=(Get-Process -PID $_.OwningProcess).Name} -PassThru } | Format-Table -AutoSize

LocalAddress    LocalPort RemoteAddress   RemotePort State       AppliedSetting OwningProcess
------------    --------- -------------   ---------- -----       -------------- -------------
::1             50737     ::              0          Listen                     12676
::              49674     ::              0          Listen                     1180
::              49671     ::              0          Listen                     1212

1 个答案:

答案 0 :(得分:1)

the docs中,它表示“对象类型确定每列中显示的默认布局和属性,但是您可以使用Property参数选择要查看的属性。”

这意味着您需要使用-Property参数并列出希望查看的属性

Get-NetTCPConnection | Foreach-Object { 
    $_ | Add-Member -NotePropertyMembers @{OwningProcessName=($_.OwningProcess).Name} -PassThru |
} | 
Format-Table -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State, AppliedSetting, OwningProcess, OwningProcessName -AutoSize

或输出仅包含所需属性并添加了新属性的新对象:

Get-NetTCPConnection | Foreach-Object { 
    $_ | Add-Member -NotePropertyMembers @{OwningProcessName=($_.OwningProcess).Name} -PassThru |
    Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, AppliedSetting, OwningProcess, OwningProcessName
} | 
Format-Table -AutoSize

也许可以通过编辑Format-Table来更改C:\windows\systems32\windowspowershell\v1.0\Types.ps1xml cmdlet显示的默认属性,但是我认为这是不可取的,当然,后果自负。 我发现了有关herehere的博客,以防您感兴趣。