Получить все НЕАКТИВНЫЕ процессы в PowerShell

#powershell

Вопрос:

Есть ли способ перечислить все неактивные имена процессов приложений в PowerShell?

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

 Get-Process | Select-Object Name
 

Кроме того, под неактивным я подразумеваю имена процессов приложений, которые не запущены. Например, получение процесса полностью закрытого приложения.

Комментарии:

1. Не могли бы вы уточнить, что вы подразумеваете под «бездействующим»? Вы надеетесь перечислить приостановленные процессы? Или вы надеетесь получить информацию о процессе простоя Системы?

2. Под неактивными я подразумеваю процессы, которые не запущены. Например, получение процесса полностью закрытого приложения.

3. Как только процесс завершается, ОС в конечном итоге удаляет все свои дескрипторы и PID, поэтому через некоторое время он просто больше не будет существовать на компьютере. Какова основная проблема, которую вы пытаетесь решить? Возможно, вы захотите включить аудит завершения процесса ?

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

5. Возможно, мы не сошлись во мнении о том, что означает бездействие. Если неактивно означает полностью закрыто, для многих из нас (включая меня), это означает, что эти процессы завершены, и завершение идентификатора процесса, который уже завершен, ничего не даст.

Ответ №1:

Как правило, информация о процессах отсутствует, если они не запущены (за исключением очень краткого времени после завершения данного процесса и с помощью информационных объектов процесса, полученных Get-Process до завершения данного процесса).

Однако любой исполняемый файл является потенциальным процессом; то есть вызов исполняемого файла создает процесс с этим именем.

Таким образом, способ получить неполный список имен процессов — кандидатов может заключаться в Get-Command следующем:

 # Note: Incomplete.
#       On Unix, omit the `-match` operation.
$potentialProcessNames = (Get-Command -Type Application).Name -match '.(exe|com)

Это неполно по нескольким причинам:

  • Он находит только исполняемые файлы, которые могут быть расположены в каталогах, перечисленных в переменной $env:PATH среды, т. е. те исполняемые файлы, которые можно вызывать только по имени.
  • Другими словами: могут быть исполняемые файлы, расположенные за пределами этих каталогов, которые все еще могут быть вызваны по их пути.
  • Поиск таких файлов не только отнимет много времени, поскольку для этого потребуется полный поиск всех доступных дисков, но и будет неполным, поскольку можно вызывать исполняемые файлы по UNC-путям, а не через сопоставленные диски.

Это неполно по нескольким причинам:

  • Он находит только исполняемые файлы, которые могут быть расположены в каталогах, перечисленных в переменной $env:PATH среды, т. е. те исполняемые файлы, которые можно вызывать только по имени.
  • Другими словами: могут быть исполняемые файлы, расположенные за пределами этих каталогов, которые все еще могут быть вызваны по их пути.
  • Поиск таких файлов не только отнимет много времени, поскольку для этого потребуется полный поиск всех доступных дисков, но и будет неполным, поскольку можно вызывать исполняемые файлы по UNC-путям, а не через сопоставленные диски.