我正在玩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
答案 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显示的默认属性,但是我认为这是不可取的,当然,后果自负。
我发现了有关here和here的博客,以防您感兴趣。