Powershell Как включить имя пользователя вместе с именем процесса, et c.,? - PullRequest
1 голос
/ 17 марта 2020
Get-NetTCPConnection | Select-Object -Property LocalAddress,LocalPort,RemoteAddress,RemotePort,State,@{name='NameofApp';expression={(Get-Process -id $_.OwningProcess).MainModule.FileVersionInfo.FileDescription}} | Format-Table -AutoSize

Вышеуказанное работает отлично, здесь я также хочу включить имя пользователя:

Я знаю, что Get-Process -IncludeUserName вернет имя пользователя, но я не знаю, как присоединиться к нему в над рабочей командой.

1 Ответ

0 голосов
/ 17 марта 2020

Используя ваш текущий запрос, вот простой модифицированный подход, который решит вашу проблему:

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 внутри блока скрипта, поэтому вам нужно использовать оператор вызова & для его запуска. Вы можете прочитать больше Об операторах и О блоках сценариев .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...