Проблема не указана c для удаленного взаимодействия: существуют процессы, модули которых принципиально [1] не могут быть перечислены из-за отсутствия разрешений, даже при работе с повышением прав (как администратор ) .
Поскольку отчет об ошибках не прекращается ошибок, вы можете просто игнорировать (все) ошибки с -ErrorAction Ignore
в источнике:
Invoke-Command -Session $session -ScriptBlock { Get-Process -Module -ErrorAction Ignore }
Если вы хотите захватить сообщения об ошибках, чтобы можно было определить процессы, для которых не удалось выполнить перечисление, используйте -ErrorVariable errs -ErrorAction SilentlyContinue
, который отключает ошибки , но собирает их в переменную $errs
для последующей проверки:
Invoke-Command -Session $session -ScriptBlock { Get-Process -Module } -ErrorVariable errs -ErrorAction SilentlyContinue
В частности, $errs.TargetObject
перечислит объекты процесса, модули которых не могут быть перечислены.
Если целью является найти (и, возможно, уничтожить) все процессы, которые используют интересующий модуль (DLL) , используйте стандартную tasklist.exe
утилиту или taskkill.exe
утилита с параметром /m
.
$moduleOfInterest = 'oleaut32.dll' # example DLL
$pids = (tasklist /m $moduleOfInterest /fo csv | ConvertFrom-Csv).PID
# Alternatively, use `taskkill` in lieu of `tasklist` above in
# order to kill the processes directly.
if ($pids) { Stop-Process -Id $pids -WhatIf }
Примечание : -WhatIf
общий параметр в приведенной выше команде предварительно выполняет операцию. Удалите -WhatIf
, как только вы убедитесь, что операция будет выполнять то, что вы хотите.
Однако при таком подходе вы можете столкнуться и с проблемами с разрешениями.
Обратите внимание, что tasklist.exe
и taskkill.exe
имеют встроенную функцию удаленного взаимодействия через параметр /S
, позволяющую настроить таргетинг на один удаленный компьютер.
Однако, используя удаленное взаимодействие PowerShell (через Invoke-Command
s -ComputerName
/ -Session
(параметры)) дает вам больше гибкости, в частности, возможность нацеливаться на несколько компьютеров параллельно.
[1] По крайней мере по умолчанию, только высота недостаточно; если кто-нибудь знает, есть ли способ перечислить, тем не менее, дайте нам знать. Этот связанный вопрос специально запрашивает эту информацию.