【发布时间】:2017-06-12 21:44:36
【问题描述】:
我创建了一个脚本来输出 Get-NetTCPConnection 数据,但另外显示 进程名称 和 用户名。该脚本确实有效,但我希望有任何提示可以简化或使其更规范。
我想知道是否有更有效的方法可以将 ProcessName 和 Username 添加到输出中,而无需将值预加载到自定义 PSObject($obj 数组)中。我担心自定义 e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty UserName)}} 表达式过于复杂。
$obj=@()
Foreach($p In (Get-Process -IncludeUserName | where {$_.UserName} | `
select Id, ProcessName, UserName)) {
$properties = @{ 'PID'=$p.Id;
'ProcessName'=$p.ProcessName;
'UserName'=$p.UserName;
}
$psobj = New-Object -TypeName psobject -Property $properties
$obj+=$psobj
}
Get-NetTCPConnection | where {$_.State -eq "Established"} | select `
RemoteAddress, `
RemotePort, `
@{n="PID";e={$_.OwningProcess}}, @{n="ProcessName";e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty ProcessName)}}, `
@{n="UserName";e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty UserName)}} |
sort -Property ProcessName, UserName |
ft -auto
这是带有一些示例输出的屏幕截图:
【问题讨论】:
-
有一个代码审查 stackexchange 站点,这可能更适合仅供参考。顺便说一句,好主意。
-
我不知道。对不起,如果这篇文章是 OT。模组,随意移动!
标签: windows powershell netstat