Используя ваш текущий запрос, вот простой модифицированный подход, который решит вашу проблему:
Get-NetTCPConnection | ForEach-Object {
$process = Get-Process -Id $_.OwningProcess -IncludeUserName
$description = $process.MainModule.FileVersionInfo.FileDescription
$username = $process.UserName
$properties = $_ | Select-Object -Property LocalAddress,LocalPort,RemoteAddress,RemotePort,State
$properties | Add-Member -Name "NameOfApp" -Type NoteProperty -Value $description
$properties | Add-Member -Name "UserName" -Type NoteProperty -Value $username
$properties
} | Format-Table -AutoSize
Объяснение:
- Труба
Get-NetTCPConnection
до Foreach-Object
. - Получите объект процесса с помощью
Get-Process
, убедившись, что имена пользователей включены с -IncludeUserName
switch. - Храните описания и имена пользователей в отдельных переменных. Не обязательно, но я разделил их для ясности.
- Получить все свойства соединения TCP, которые можно выбрать сразу с помощью
Select-Object
в System.Management.Automation.PSCustomObject
. При этом используется переменная конвейера по умолчанию $_
из Foreach-Object
, которая в основном является текущим элементом из GetNetTCPConnection
. Вы можете запустить Get-Help -Name about_Automatic_Variables
, чтобы узнать больше о конвейерных переменных, и Get-Help -Name about_pipelines
, чтобы узнать больше о конвейерах. К сожалению, эти файлы справки не содержат онлайн-версий. - Добавьте элементы
NameOfApp
и UserName
к объекту с помощью Add-Member
. - Форматируйте в таблицу с помощью
Format-Table
и столбцы авторазмера с переключателем -AutoSize
.
Вы также можете использовать обычное перечисление foreach
:
& {
foreach ($connection in Get-NetTCPConnection) {
$process = Get-Process -Id $connection.OwningProcess -IncludeUserName
$description = $process.MainModule.FileVersionInfo.FileDescription
$username = $process.UserName
$properties = $connection | Select-Object -Property LocalAddress,LocalPort,RemoteAddress,RemotePort,State
$properties | Add-Member -Name "NameOfApp" -Type NoteProperty -Value $description
$properties | Add-Member -Name "UserName" -Type NoteProperty -Value $username
$properties
}
} | Format-Table -AutoSize
Выше приведено обертывание foreach
l oop внутри блока скрипта, поэтому вам нужно использовать оператор вызова &
для его запуска. Вы можете прочитать больше Об операторах и О блоках сценариев .