#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-путям, а не через сопоставленные диски.