Как найти путь к файлу процесса, который отображается в TCP-соединениях более 4 раз - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь написать сценарий, который проверяет, какие процессы устанавливают соединения, и, если он обнаруживается более 4 раз, записать путь к файлу для исполняемого файла этого элемента. В идеале я хотел бы исключить такие вещи, как Outlook, Chrome, SVC Host и т. Д. Пока что у меня есть

$Processes=(Get-NetTCPConnection).owningProcess
$Array= @(
Foreach ($Process in $Processes | Where-Object ($_.Count -gt 4))
{
    Get-Process | Select-Object -ExpandProperty Path 
    }
)
$array

Но это ничего не выдает. Если я удаляю «предложение Where-object», оно выводит гораздо больше информации, чем необходимо.

1 Ответ

1 голос
/ 09 октября 2019

Я бы использовал для этого Group-Object.

$Processes = (Get-NetTCPConnection).OwningProcess | Group-Object |
    Where-Object {$_.Count -gt 4}
$Array = $Processes | Foreach-Object {
    Get-Process -Id $_.Name | Select-Object -ExpandProperty Path
}
$Array

Объяснение:

Group-Object групп по свойству или значению,Вывод представляет собой коллекцию GroupInfo объектов, имеющих свойство Name, которое содержит сгруппированное значение. Он содержит свойство Count, которое подсчитывает количество совпадающих значений. Передача этого объекта в Where-Object позволяет создать условие, основанное на свойстве Count ($_.Count -gt 4).

Каждое значение Name в коллекции GroupInfo соответствует идентификатору процесса. Вы можете направить эти идентификаторы процессов в Get-Process , используя параметр -Id. Вывод Get-Process будет объектом Process, который содержит свойство Path. В зависимости от процесса Path может быть или не быть пустым.

Select-Object с -ExpandProperty вернет расширенное свойство для каждого элемента конвейерной коллекции.

...