Фильтрация процессов по FileName модуля - PullRequest
0 голосов
/ 21 октября 2018

Если мне нужно отфильтровать процессы по FileName модуля, следующий код выполняет работу:

Get-Process | where { $_.Modules.FileName -eq "xxx\yyy.dll”) }

Но если мне нужно отфильтровать модули по FileName, начинающемуся со строки, следующий код некажется, работает:

Get-Process | where { $_.Modules.FileName.StartsWith("xxx\yyy.dll”)) }

В результате я вижу все процессы в выводе.Я очень запутался, почему фильтрация не работает в случае StartsWith

1 Ответ

0 голосов
/ 21 октября 2018

Член modules может быть коллекцией.Таким образом это должно быть повторено также.Например,

(get-process) | % {
    if($_.modules -ne $null) { # No modules, no action
        $_.modules | ? { $_.filename.tolower().startswith("c:\program") }
    }
}

Что касается вопроса, на самом деле есть две итерации.Давайте использовать явные переменные вместо конвейерной обработки и печати файлов актуальных модулей.Передача нескольких $_ с не так просто прочитать синтаксис.Вот так

foreach ($p in get-process) {
    if ($p.modules -ne $null){
        write-host $p.id $p.ProcessName
        foreach($m in $p.modules){
            if ($m.filename.tolower().startswith("c:\program") ) {
                write-host `t $m.moduleName $m.FileName # ` markdown bug
            }
        } 
        write-host
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...