Powershell список процессов: Управление процессами с помощью PowerShell

Содержание

Управление процессами с помощью командлетов процессов — PowerShell


  • Статья



Этот пример относится только к Windows PowerShell 5.1.

Командлеты process в PowerShell можно использовать для управления локальными и удаленными процессами в PowerShell.

Получение процессов

Для получения процессов, запущенных на локальном компьютере, выполните командет Get-Process без параметров.

Отдельные процессы можно получить, указав их имена или идентификаторы. Следующая команда возвращает процесс Idle:

Get-Process -id 0
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
      0       0        0         16     0               0 Idle

Хотя в некоторых ситуациях командлеты обычно не возвращают данные, при указании процесса по идентификатору ProcessId возникает ошибка, Get-Process если совпадений не найдено, так как обычно целью является получение известного выполняющегося процесса. Если процесс с таким идентификатором отсутствует, скорее всего, идентификатор неверный или процесс, который уже завершился:

Get-Process -Id 99
Get-Process : No process with process ID 99 was found.
At line:1 char:12
+ Get-Process  <<<< -Id 99

Параметр Name командлета Get-Process можно использовать для указания подмножества процессов на основе имени процесса. Параметр Name может принимать несколько имен в виде списка с разделителями-запятыми и поддерживает использование подстановочных знаков, что позволяет задавать шаблоны имен.

Например, следующая команда возвращает процессы, имена которых начинаются с «ex.».

Get-Process -Name ex*
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    234       7     5572      12484   134     2.98   1684 EXCEL
    555      15    34500      12384   134   105.25    728 explorer

Поскольку класс . NET System.Diagnostics.Process является основой для процессов PowerShell, он соответствует некоторым соглашениям, используемым System.Diagnostics.Process. Одно из этих соглашений заключается в том, что имя процесса для исполняемого файла никогда не содержит .exe в конце имени исполняемого файла.

Get-Process также принимает несколько значений для параметра Name.

Get-Process -Name exp*,power*
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    540      15    35172      48148   141    88.44    408 explorer
    605       9    30668      29800   155     7.11   3052 powershell

Параметр ComputerName командлета Get-Process можно использовать для получения процессов на удаленных компьютерах. Например, следующая команда получает процессы PowerShell на локальном (представленным «localhost») и двух удаленных компьютерах.

Get-Process -Name PowerShell -ComputerName localhost, Server01, Server02
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    258       8    29772      38636   130            3700 powershell
    398      24    75988      76800   572            5816 powershell
    605       9    30668      29800   155     7.11   3052 powershell

Имена компьютеров не очевидны в этом отображении, но они хранятся в свойстве MachineName возвращаемых Get-Process объектов процесса. Следующая команда использует командлет Format-Table для отображения свойств ID, ProcessName и MachineName (ComputerName) объектов процесса.

Get-Process -Name PowerShell -ComputerName localhost, Server01, Server01 |
    Format-Table -Property ID, ProcessName, MachineName
  Id ProcessName MachineName
  -- ----------- -----------
3700 powershell  Server01
3052 powershell  Server02
5816 powershell  localhost

Эта более сложная команда добавляет в стандартные отображаемые данные Get-Process свойство MachineName.

Get-Process powershell -ComputerName localhost, Server01, Server02 |
    Format-Table -Property Handles,
        @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}},
        @{Label="PM(K)";Expression={[int]($_.PM/1024)}},
        @{Label="WS(K)";Expression={[int]($_.WS/1024)}},
        @{Label="VM(M)";Expression={[int]($_.VM/1MB)}},
        @{Label="CPU(s)";Expression={if ($_.CPU -ne $()){$_.CPU.ToString("N")}}},
        Id, ProcessName, MachineName -auto
Handles  NPM(K)  PM(K) WS(K) VM(M) CPU(s)  Id ProcessName  MachineName
-------  ------  ----- ----- ----- ------  -- -----------  -----------
    258       8  29772 38636   130         3700 powershell Server01
    398      24  75988 76800   572         5816 powershell localhost
    605       9  30668 29800   155 7.11    3052 powershell Server02

Остановка процессов

PowerShell обеспечивает гибкость при перечислении процессов, но как насчет остановки процесса?

Командлет Stop-Process принимает имя или идентификатор , чтобы указать процесс, который необходимо остановить. Возможность остановки процессов зависит от ваших разрешений. Некоторые процессы не могут быть остановлены. Например, при попытке остановить неактивный процесс возникает ошибка:

Stop-Process -Name Idle
Stop-Process : Process 'Idle (0)' cannot be stopped due to the following error:
 Access is denied
At line:1 char:13
+ Stop-Process  <<<< -Name Idle

Можно также принудительно вывести запрос с помощью параметра Confirm. Этот параметр особенно удобен, если при указании имени процесса используется подстановочный знак, так как вы можете случайно сопоставить некоторые процессы, которые не нужно останавливать:

Stop-Process -Name t*,e* -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "explorer (408)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):n
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "taskmgr (4072)". 
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):n

Сложную обработку процессов можно реализовать с помощью командлетов фильтрации объектов. Так как объект Process имеет свойство Responding , которое имеет значение true, если он больше не отвечает, вы можете остановить все неотвечивые приложения с помощью следующей команды:

Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process

Аналогичный подход возможен и в других ситуациях. Предположим, например, что приложение дополнительной области уведомлений запускается автоматически при открытии другого приложения. Вы можете обнаружить, что это не работает правильно в сеансах служб терминалов, но вы по-прежнему хотите сохранить его в сеансах, которые выполняются на консоли физического компьютера. Сеансы, подключенные к рабочему столу физического компьютера, всегда имеют идентификатор сеанса 0, поэтому можно остановить все экземпляры процесса, находящиеся в других сеансах, с помощью Where-Object и SessionId процесса:

Get-Process -Name BadApp | Where-Object -FilterScript {$_. SessionId -neq 0} | Stop-Process

Командлет Stop-Process не имеет параметра ComputerName . Поэтому для выполнения команды остановки процесса на удаленном компьютере необходимо использовать командлет Invoke-Command. Например, чтобы остановить процесс PowerShell на удаленном компьютере Server01, введите:

Invoke-Command -ComputerName Server01 {Stop-Process Powershell}

Остановка всех остальных сеансов PowerShell

Иногда может быть полезно остановить все запущенные сеансы PowerShell, отличные от текущего. Если сеанс использует слишком много ресурсов или недоступен (он может выполняться удаленно или в другом сеансе), возможно, остановить его напрямую не получится. При попытке остановить все выполняющиеся сеансы может быть завершен текущий сеанс.

Каждый сеанс PowerShell имеет переменную среды PID, которая содержит идентификатор Windows PowerShell процесса. Можно проверить переменную $PID на наличие идентификатора каждого сеанса и завершить только сеансы Windows PowerShell с другим идентификатором. Следующая команда конвейера делает именно это и возвращает список завершенных сеансов (из-за использования параметра PassThru):

Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} |
    Stop-Process -PassThru
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    334       9    23348      29136   143     1.03    388 powershell
    304       9    23152      29040   143     1.03    632 powershell
    302       9    20916      26804   143     1.03   1116 powershell
    335       9    25656      31412   143     1.09   3452 powershell
    303       9    23156      29044   143     1.05   3608 powershell
    287       9    21044      26928   143     1.02   3672 powershell

Запуск, отладка и ожидание процессов

PowerShell также поставляется с командлетами для запуска (или перезапуска), отладки процесса и ожидания завершения процесса перед выполнением команды. Дополнительные сведения об этих командлетах см. в разделах справки по каждому из них.

См. также раздел

  • Get-Process
  • Stop-Process
  • Start-Process
  • Wait-Process
  • Debug-Process
  • Invoke-Command

Get-Process (Microsoft.PowerShell.Management) — PowerShell | Microsoft Learn

  • Ссылка
Модуль:
Microsoft.PowerShell.Management

Возвращает процессы, выполняемые на локальном компьютере.

Синтаксис

Get-Process
   [[-Name] <String[]>]
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   [[-Name] <String[]>]
   -IncludeUserName
   [<CommonParameters>]
Get-Process
   -Id <Int32[]>
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   -Id <Int32[]>
   -IncludeUserName
   [<CommonParameters>]
Get-Process
   -InputObject <Process[]>
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   -InputObject <Process[]>
   -IncludeUserName
   [<CommonParameters>]

Описание

Командлет Get-Process получает процессы на локальном компьютере.

Без параметров этот командлет получает все процессы на локальном компьютере. Вы также можете указать конкретный процесс по имени процесса или идентификатору процесса (PID) или передать объект процесса через конвейер в этот командлет.

По умолчанию этот командлет возвращает объект процесса, который содержит подробные сведения о процессе и поддерживает методы, позволяющие запускать и останавливать процесс. Можно также использовать параметры командлета Get-Process для получения сведений о версии файла для программы, которая выполняется в процессе, и для получения модулей, загруженных процессом.

Примеры

Пример 1. Получение списка всех активных процессов на локальном компьютере

Get-Process

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

Пример 2. Получение всех доступных данных об одном или нескольких процессах

Get-Process winword, explorer | Format-List *

Эта команда возвращает все доступные данные о процессах Winword и проводника на компьютере. Он использует параметр Name для указания процессов, но не указывает необязательное имя параметра. Оператор конвейера (|) передает данные командлету Format-List , который отображает все доступные свойства (*) объектов Winword и Обозреватель процесса.

Процессы также можно определить по идентификаторам (PID). Например, Get-Process -Id 664, 2060.

Пример 3. Получение всех процессов с рабочим набором, превышающим указанный размер

Get-Process | Where-Object {$_.WorkingSet -gt 20000000}

Эта команда возвращает все процессы, размер рабочего набора которых превышает 20 МБ. Для получения всех запущенных процессов используется Get-Process командлет . Оператор конвейера (|) передает объекты процесса командлету Where-Object , который выбирает только объект со значением более 20 000 000 байт для свойства WorkingSet .

WorkingSet является одним из многих свойств объектов процесса. Чтобы просмотреть все свойства, введите Get-Process | Get-Member. По умолчанию значения всех свойств объема указываются в байтах, несмотря на то что по умолчанию отображаются они отображаются в килобайтах и мегабайтах.

Пример 4. Перечисление процессов на компьютере в группах на основе приоритета

$A = Get-Process
$A | Get-Process | Format-Table -View priority

Эти команды перечисляют процессы на компьютере в группы на основе их класса приоритета. Первая команда получает все процессы на компьютере, а затем сохраняет их в переменной $A .

Вторая команда передает объект Process , хранящийся в $A переменной Get-Process , в командлет , а затем Format-Table в командлет , который форматирует процессы с помощью представления Приоритет .

Представление Приоритет и другие представления определяются в файлах формата PS1XML в домашнем каталоге PowerShell ($pshome).

Пример 5. Добавление свойства к стандартному отображению выходных Get-Process

Get-Process pwsh | Format-Table `
    @{Label = "NPM(K)"; Expression = {[int]($_.NPM / 1024)}},
    @{Label = "PM(K)"; Expression = {[int]($_.PM / 1024)}},
    @{Label = "WS(K)"; Expression = {[int]($_.WS / 1024)}},
    @{Label = "VM(M)"; Expression = {[int]($_.VM / 1MB)}},
    @{Label = "CPU(s)"; Expression = {if ($_.CPU) {$_.CPU.ToString("N")}}},
    Id, ProcessName, StartTime -AutoSize
NPM(K)  PM(K)  WS(K)   VM(M) CPU(s)    Id ProcessName StartTime
------  -----  -----   ----- ------    -- ----------- ---------
   143 239540 259384 2366162 22.73  12720 pwsh        12/5/2022 3:21:51 PM
   114  61776 104588 2366127 11.45  18336 pwsh        12/5/2022 7:30:53 AM
   156  77924  82060 2366185 10.47  18812 pwsh        12/5/2022 7:30:52 AM
    85  48216 115192 2366074 1.14   24428 pwsh        12/8/2022 9:14:15 AM

В этом примере извлекаются процессы с локального компьютера. Полученные процессы передаются по конвейеру в Format-Table команду, которая добавляет свойство StartTime к стандартному Get-Process отображению выходных данных.

Пример 6. Получение сведений о версии для процесса

Get-Process pwsh -FileVersionInfo
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.2            6.1.2            C:\Program Files\PowerShell\6\pwsh.exe

Эта команда использует параметр FileVersionInfo для pwsh.exe получения сведений о версии файла, который является модулем main для процесса PowerShell.

Чтобы выполнить эту команду с процессами, которые не принадлежат в Windows Vista и более поздних версиях Windows, необходимо открыть PowerShell с параметром Запуск от имени администратора .

Пример 7. Получение модулей, загруженных с помощью указанного процесса

Get-Process SQL* -Module

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

Чтобы выполнить эту команду в Windows Vista и более поздних версиях Windows с процессами, которыми вы не владеете, необходимо запустить PowerShell с параметром Запуск от имени администратора .

Пример 8. Поиск владельца процесса

Get-Process pwsh -IncludeUserName
Handles      WS(K)   CPU(s)     Id UserName            ProcessName
-------      -----   ------     -- --------            -----------
    782     132080     2.08   2188 DOMAIN01\user01     pwsh

В этом примере показано, как найти владельца процесса.
В Windows параметру IncludeUserName требуются повышенные права пользователя (запуск от имени администратора).
В выходных данных показано, что владельцем является Domain01\user01.

Пример 9. Использование автоматической переменной для определения процесса, в котором размещен текущий сеанс

Get-Process pwsh
NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
------    -----      -----     ------      --  -- -----------
    83    96.21     105.95       4.33    1192  10 pwsh
    79    83.81     117.61       2.16   10580  10 pwsh
Get-Process -Id $PID
NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
------    -----      -----     ------      --  -- -----------
    83    96. 21      77.53       4.39    1192  10 pwsh

Эти команды показывают, как использовать автоматическую $PID переменную для определения процесса, в котором размещается текущий сеанс PowerShell. Этот метод можно использовать для отличия ведущего процесса от других процессов PowerShell, которые может потребоваться остановить или закрыть.

Первая команда получает все процессы PowerShell в текущем сеансе.

Вторая команда получает процесс PowerShell, в котором размещается текущий сеанс.

Пример 10. Получение всех процессов с main заголовком окна и их отображение в таблице

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize

Эта команда возвращает все процессы с заголовком главного окна и отображает их в таблице, где также указаны идентификатор и имя процесса.

Свойство mainWindowTitle является лишь одним из многих полезных свойств возвращаемого объекта Get-ProcessProcess. Чтобы просмотреть все свойства, передайте результаты Get-Process команды в Get-Member командлет Get-Process | Get-Member.

Параметры

-FileVersionInfo

-Id

-IncludeUserName

-InputObject

-Module

-Name

Входные данные

Process

Объект процесса можно передать в этот командлет по конвейеру.

Выходные данные

Process

По умолчанию этот командлет возвращает объект System.Diagnostics.Process .

FileVersionInfo

При использовании параметра FileVersionInfo этот командлет возвращает объект FileVersionInfo .

ProcessModule

При использовании параметра Module без параметра FileVersionInfo этот командлет возвращает объект ProcessModule .

Примечания

PowerShell включает следующие псевдонимы для Get-Process:

  • Для всех платформ.
    • gps
  • Windows:
    • ps

На компьютерах под управлением 64-разрядной версии Windows 64-разрядная версия PowerShell получает только 64-разрядные модули процессов, а 32-разрядная версия PowerShell — только 32-разрядные модули процессов.

Чтобы получить сведения о процессе с удаленного компьютера, используйте Invoke-Command командлет . Дополнительные сведения см. в разделе Invoke-Command.

В PowerShell можно использовать свойства и методы Win32_Process объекта инструментария управления Windows (WMI). Дополнительные сведения см. в разделе Win32_Process.

По умолчанию процесс отображается как таблица, которая содержит следующие столбцы. Описание всех свойств объектов процесса см. в разделе Свойства процесса.

  • Дескрипторы: количество дескрипторов, открытых процессом.
  • NPM(K): объем памяти без страницы, используемой процессом, в килобайтах.
  • PM(K): объем доступной для страницы памяти, используемой процессом, в килобайтах.
  • WS(K): размер рабочего набора процесса в килобайтах. Рабочий набор состоит из страниц памяти, на которые недавно ссылался процесс.
  • VM(M): объем виртуальной памяти, используемой процессом, в мегабайтах. Виртуальная память используется для хранения файлов подкачки на диске.
  • ЦП: количество процессорного времени, которое процесс использовал на всех процессорах, в секундах.
  • Идентификатор: идентификатор процесса (PID) процесса.
  • ProcessName: имя процесса. Описание понятий, связанных с процессами, см. в центре справки и поддержки, а также в справке диспетчера задач.

Вы также можете использовать встроенные альтернативные представления процессов, доступные с Format-Tableпомощью , например StartTime и Priority, и создавать собственные представления.

  • Debug-Process
  • Get-Process
  • Start-Process
  • Stop-Process
  • Wait-Process

Get-Process (Microsoft.PowerShell.Management) — PowerShell | Microsoft Learn

  • Справочник
Модуль:
Microsoft.PowerShell.Управление

Получает процессы, запущенные на локальном компьютере.

Синтаксис

 Get-Process
   [[-Имя] <Строка[]>]
   [-Модуль]
   [-Информация о ВерсииФайла]
   [] 
 Get-Process
   [[-Имя] <Строка[]>]
   -IncludeUserName
   [<Общие параметры>] 
 Процесс получения
   -Ид 
   [-Модуль]
   [-Информация о ВерсииФайла]
   [] 
 Get-Process
   -Ид 
   -IncludeUserName
   [] 
 Get-Process
   -InputObject <Процесс[]>
   [-Модуль]
   [-Информация о ВерсииФайла]
   [] 
 Get-Process
   -InputObject <Процесс[]>
   -IncludeUserName
   [] 

Описание

Процесс Get-Process 9Командлет 0032 получает процессы на локальном компьютере.

Без параметров этот командлет получает все процессы на локальном компьютере. Вы также можете
указать конкретный процесс по имени процесса или идентификатору процесса (PID) или передать объект процесса через
конвейер к этому командлету.

По умолчанию этот командлет возвращает объект процесса с подробной информацией о процессе и
поддерживает методы, позволяющие запускать и останавливать процесс. Также можно использовать параметры
Get-процесс 9Командлет 0032 для получения информации о версии файла для программы, работающей в процессе, и для
получить модули, загруженные процессом.

Примеры

Пример 1: Получить список всех активных процессов на локальном компьютере

 Get-Process 

Эта команда получает список всех активных процессов, запущенных на локальном компьютере. Для определения
каждого столбца см. раздел «Примечания».

Пример 2: получение всех доступных данных об одном или нескольких процессах

 Get-Process winword, explorer | Список форматов * 

Эта команда получает все доступные данные о процессах Winword и Explorer на компьютере. Это
использует параметр Name для указания процессов, но опускает необязательное имя параметра.
оператор конвейера ( | ) передает данные командлету Format-List , который отображает все доступные
свойства ( * ) объектов процессов Winword и Explorer.

Вы также можете идентифицировать процессы по их идентификаторам процессов. Например, Get-Process-Id 664, 2060 .

Пример 3. Получение всех процессов с рабочим набором, превышающим указанный размер

 Get-Process | Where-Object {$_.WorkingSet -gt 20000000} 

Эта команда получает все процессы, рабочий набор которых превышает 20 МБ. Он использует
Командлет Get-Process для получения всех запущенных процессов. Оператор конвейера ( | ) проходит процесс
объекты командлету Where-Object , который выбирает только объект со значением больше
20 000 000 байт для Свойство рабочего набора .

Рабочий набор — одно из многих свойств объектов процесса. Чтобы просмотреть все свойства, введите
Процесс получения | Get-член . По умолчанию значения всех свойств суммы указаны в байтах, даже
хотя на дисплее по умолчанию они перечислены в килобайтах и ​​​​мегабайтах.

Пример 4. Список процессов на компьютере в группах на основе приоритета

 $A = Get-Process
$А | Get-процесс | Format-Table -View priority 

Эти команды перечисляют процессы на компьютере в группах в зависимости от их класса приоритета. Первый
команда получает все процессы на компьютере, а затем сохраняет их в $A переменная.

Вторая команда передает объект Process , хранящийся в переменной $A , в Get-Process .
командлет, а затем командлет Format-Table , который форматирует процессы с использованием приоритета .
вид.

Представление Priority и другие представления определяются в файлах формата PS1XML в PowerShell.
домашний каталог ( $pshome ).

Пример 5. Добавление свойства в стандартный экран выходных данных Get-Process

 Процесс получения pwsh | Формат-Таблица `
    @{Ярлык = "НПМ(К)"; Выражение = {[int]($_.NPM/1024)}},
    @{Ярлык = "PM(K)"; Выражение = {[int]($_.PM/1024)}},
    @{Ярлык = "WS(K)"; Выражение = {[int]($_.WS/1024)}},
    @{Ярлык = "ВМ(М)"; Выражение = {[int]($_.VM / 1MB)}},
    @{Label = "ЦП(ы)"; Выражение = {if ($_.CPU) {$_.CPU.ToString("N")}}},
    Идентификатор, имя процесса, время начала - AutoSize
NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName StartTime
------ ----- ----- ----- ------ -- ----------- ---------
   143 239540 259384 2366162 22,73 12720 пвш 5/12/2022 15:21:51
   114 61776 104588 2366127 11.45 18336 пвш 5/12/2022 7:30:53
   156 77924 82060 2366185 10.47 18812 пвш 5/12/2022 7:30:52
    85 48216 115192 2366074 1.14 24428 pwsh 08.12.2022 9:14:15 

В этом примере извлекаются процессы с локального компьютера. Извлеченные процессы передаются в
Команда Format-Table , которая добавляет свойство StartTime к стандартному Вывод Get-Process
отображать.

Пример 6: Получить информацию о версии процесса

 Get-Process pwsh -FileVersionInfo
ProductVersion FileVersion FileName
-------------- ----------- --------
6.1.2 6.1.2 C:\Program Files\PowerShell\6\pwsh.exe 

Эта команда использует параметр FileVersionInfo для получения информации о версии для
pwsh.exe Файл , который является основным модулем для процесса PowerShell.

Чтобы выполнить эту команду с процессами, которыми вы не владеете, в Windows Vista и более поздних версиях
Windows, вы должны открыть PowerShell с параметром «Запуск от имени администратора ».

Пример 7: Получить модули, загруженные указанным процессом

 Get-Process SQL* -Module 

Эта команда использует параметр Module для получения модулей, загруженных процессом.
Эта команда получает модули для процессов, имена которых начинаются с 9.0031 SQL
.

Чтобы запустить эту команду в Windows Vista и более поздних версиях Windows с процессами, которые вы не
необходимо запустить PowerShell с параметром «Запуск от имени администратора ».

Пример 8. Поиск владельца процесса

 Get-Process pwsh -IncludeUserName
Обрабатывает WS(K) CPU(s) ID UserName ProcessName
------- ----- ------ -- -------- -----------
    782 132080 2.08 2188 ДОМЕН01\user01 pwsh 

Эта команда показывает, как найти владельца процесса.
В Windows параметр IncludeUserName требует повышенных прав пользователя.
( Запуск от имени администратора ).
Вывод показывает, что владельцем является Domain01\user01 .

Пример 9. Используйте автоматическую переменную для определения процесса, в котором находится текущий сеанс

 Get-Process pwsh
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
    83 96,21 105,95 4,33 1192 10 псш
    79 83,81 117,61 2,16 10580 10 ршш
Get-Process-Id $PID
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
    83 96.21 77.53 4.39 1192 10 pwsh 

Эти команды показывают, как использовать автоматическую переменную $PID для идентификации процесса, на котором
текущий сеанс PowerShell. Вы можете использовать этот метод, чтобы отличить хост-процесс от других
Процессы PowerShell, которые вы, возможно, захотите остановить или закрыть.

Первая команда получает все процессы PowerShell в текущем сеансе.

Вторая команда получает процесс PowerShell, в котором находится текущий сеанс.

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

 Get-Process | Где-Объект {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize 

Эта команда получает все процессы, имеющие заголовок главного окна, и отображает их в таблице.
с идентификатором процесса и именем процесса.

Свойство mainWindowTitle — это лишь одно из многих полезных свойств объекта Process .
что Get-Process возвращает. Чтобы просмотреть все свойства, передайте результаты Get-Process .
командлету Get-Member Get-Process | Get-член .

Параметры

-FileVersionInfo

-Id

-IncludeUserName

-InputObject

-Module

-Name

Вводы

Процесс

Вы можете передать объект процесса этому командлету.

Выходы

Процесс

По умолчанию этот командлет возвращает объект System.Diagnostics.Process .

FileVersionInfo

Если вы используете параметр FileVersionInfo , этот командлет возвращает объект FileVersionInfo .

ProcessModule

Если вы используете Параметр модуля , без параметра FileVersionInfo этот командлет возвращает
объект ProcessModule .

Примечания

PowerShell включает следующие псевдонимы для Get-Process :

  • Все платформы:
    • GPS
  • Windows:
    • шт.

На компьютерах с 64-разрядной версией Windows 64-разрядная версия PowerShell получает
только 64-разрядные модули процессов, а 32-разрядная версия PowerShell получает только 32-разрядные модули процессов.

Чтобы получить информацию о процессе с удаленного компьютера, используйте командлет Invoke-Command . Для большего
информацию см. в Invoke-Command.

Вы можете использовать свойства и методы инструментария управления Windows (WMI)
Объект Win32_Process в PowerShell. Для получения информации см.
Win32_Процесс.

По умолчанию процесс отображается в виде таблицы, включающей следующие столбцы. Для описания
обо всех свойствах объектов процесса см.
Свойства процесса.

  • Дескрипторы : Количество дескрипторов, открытых процессом.
  • NPM(K) : объем невыгружаемой памяти, используемой процессом, в килобайтах.
  • PM(K) : Объем выгружаемой памяти, используемой процессом, в килобайтах.
  • WS(K) : Размер рабочего набора процесса в килобайтах. Рабочий комплект состоит из
    страницы памяти, на которые недавно ссылался процесс.
  • VM(M) : объем виртуальной памяти, используемой процессом, в мегабайтах. Виртуальная память
    включает хранение в файлах подкачки на диске.
  • ЦП : Количество процессорного времени, которое процесс использовал на всех процессорах, в секундах.
  • ID : Идентификатор процесса (PID).
  • ProcessName : Имя процесса. Для объяснения понятий, связанных с процессами, см.
    см. глоссарий в центре справки и поддержки и справку для диспетчера задач.

Вы также можете использовать встроенные альтернативные представления процессов, доступные с Format-Table , например
как StartTime и Priority , и вы можете создавать свои собственные представления.

  • Процесс отладки
  • Процесс получения
  • Запуск процесса
  • Остановить процесс
  • Процесс ожидания

Командлет Steamy PowerShell Get-Process для запущенных процессов

Заинтересованы в использовании командлета PowerShell Get-Process для отображения запущенных процессов системы? С Get-Process вы можете найти владельца процесса, идентификатор процесса или даже местонахождение процесса на диске.

В этой статье вы узнаете, как использовать командлет PowerShell Get-Process на реальных примерах. Если спорить с процессами, чтобы подчинить их своей воле в Windows или Linux, звучит весело, тогда продолжайте читать!

Связано: Как убить процесс в Linux, используя ps, pgrep, pkill и многое другое!

Предпосылки

Прежде чем идти дальше, ниже приведены необходимые предварительные условия для выполнения примеров в этой статье.

  • Хотя для большинства примеров здесь достаточно Windows PowerShell 5.1, для поддержки Linux необходим PowerShell 7.1 и выше.

Связано: Обновление до PowerShell 7: пошаговое руководство

  • В этой статье используются Windows 10 и Ubuntu 20.04 LTS, но подойдет любая ОС, на которой работает PowerShell.

Готов? Давайте погрузимся и управлять некоторыми процессами!

Отображение запущенных процессов

Get-Process управляет локальными процессами. В этом первом примере вы используете мдлет PowerShell Get-Process c . Эта команда отображает все запущенные процессы.

Get-Process возвращает моментальный снимок информации о запущенных процессах системы. Для отображения информации о процессе в реальном времени Windows предлагает диспетчер задач Windows, а Linux предлагает команду top.

Чтобы начать работу, откройте консоль PowerShell и запустите Get-Process . Обратите внимание, что Get-Process возвращает информацию о запущенном процессе, как показано ниже. Выходной формат идентичен для операционных систем Windows и Linux.

Использование командлета Get-Process в Windows для отображения локальных процессов.

По умолчанию gps или ps существуют как псевдонимы команд для Get-Process . Поскольку PowerShell 7 является кроссплатформенным, Команда ps конфликтует со встроенной командой Linux. Поэтому ps не будет работать в Linux, только псевдоним gps .

Значение вывода Get-Process может быть неочевидным. Свойства по умолчанию Get-Process более подробно описаны ниже.

  • NPM(K) — объем невыгружаемой памяти, используемой процессом, отображается в килобайтах, как указано в нотации (K) .
  • PM(M) — объем страничной памяти, который использует процесс, отображается в мегабайтах, как указано в нотации (M) .
  • WS(M) – Размер рабочего набора процесса, отображаемый в мегабайтах. Рабочий набор состоит из страниц памяти, на которые недавно ссылался процесс.
  • VM(M) — объем виртуальной памяти, используемой процессом, в мегабайтах. Включает хранение в файлах подкачки на диске.
  • CPU(S) — количество процессорного времени, которое процесс использовал во всех процессах, отображается в секундах.
  • Id — идентификатор процесса (PID) процесса.
  • SI – Идентификатор сеанса запущенного процесса. Сеанс 0 указывает, что процесс доступен для всех пользователей, 1 указывает, что процесс существует под первым зарегистрированным пользователем, и так далее.
  • ProcessName — Имя запущенного процесса.

Чтобы отобразить список псевдонимов свойств, сопоставленных с полными именами свойств, используйте команду Get-Process | Get-Member -MemberType 'AliasProperty' .

Ниже приведен еще один отличный пример. Для каждого найденного экземпляра процесса Brave он использует идентификатор этого процесса ( $_.id ) и передает его в Get-NetTCPConnection . Затем PowerShell использует Get-NetTCPConnection для поиска информации о каждом сетевом соединении,0352 храбрый процесс открыт.

Запустите следующий код в сеансе PowerShell, когда запущен браузер Brave.

 Get-Process -Name храбрый | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue }
 

Спасибо Джею Адамсу из SystemFrontier!

Поздравляем, теперь вы можете просматривать все запущенные процессы как в Windows, так и в Linux, используя Get-Process !

Поиск определенных атрибутов процесса

Get-Process возвращает множество различных свойств запущенных процессов, как вы видели ранее. Как и в случае со всеми другими объектами PowerShell, вы можете выборочно выбирать свойства объектов.

Давайте теперь рассмотрим простой пример того, как вы можете получить определенные свойства для определенного процесса:

  1. Запустите калькулятор Windows.

2. При открытой консоли PowerShell запустите Get-Process , используя параметр Name , чтобы отобразить только все запущенные процессы с Калькулятор как имя. Вы увидите тот же результат, что и ранее.

 Get-Process -Name 'Calculator' 

Get-Process возвращает множество свойств, как и ожидалось. Возможно, вы хотите найти загрузку ЦП только со значением в столбце CPU(s) . Заключите команду Get-Process в круглые скобки и укажите ссылку на свойство CPU , как показано ниже. Вы увидите, что он возвращает только значение свойства CPU .

 (Get-Process -Name «Калькулятор»). ЦП 

Обратите внимание, что Get-Process возвращает имя ЦП , а во фрагменте кода выше используется имя ЦП . Иногда PowerShell не показывает реальное имя свойства в выходных данных. Эта концепция реализуется с помощью файла форматирования PS1XML.

Время процессора выражается как сумма секунд для всех ядер. Чтобы получить более удобочитаемое число, округлите его до ближайшей десятой, используя 9. 0031 Метод Math , как показано ниже.

 $cpu = (Get-Process -Name 'Calculator').CPU
[математика]::Round($cpu,2)
 

Процесс калькулятора использует менее 1 секунды процессорного времени на всех ядрах.

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

Оставьте приложение Calculator работающим. Вы будете использовать это приложение для остальных примеров.

Получение информации об использовании памяти процесса

Устранение неполадок медленно работающих систем может быть сложной задачей, причиной которой часто является нехватка памяти. Продолжая работу с приложением Calculator , извлеките процесс Calculator и отобразите только свойство VM . Как видно ниже, используемая память отображается в мегабайтах (МБ).

 (Get-Process -Name «Калькулятор»). VM
 

Отображение использования памяти процесса Калькулятор .

Чтобы лучше понять использование памяти, используйте встроенные множители преобразования PowerShell для преобразования мегабайтов (МБ) в гигабайты (ГБ). В приведенном ниже примере вы преобразуете используемую память в ГБ, а затем используете математическую библиотеку .NET 9.0031 Метод округления для округления значения, как показано на снимке экрана ниже.

 $ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemory ГБ / 1 ГБ
# Используйте метод округления типа .NET Math
[Математика]::Round($ProcessMemoryGB/1GB)
 

Использование встроенных утилит PowerShell для преобразования значений облегчает понимание вывода. Читайте дальше, чтобы узнать, как найти идентификатор процесса.

Преобразование использования памяти процесса калькулятора в округленный формат ГБ.

Разоблачение малоизвестных свойств

Не все свойства включаются или отображаются по умолчанию с помощью Get-Process . Читайте ниже, чтобы узнать больше о свойствах Path и UserName и о том, как их использовать!

Обнаружение того, где живет двоичный файл процесса

В системе есть много мест, где может храниться исполняемый файл процесса. Если процесс в настоящее время запущен, Get-Process упрощает поиск пути к файловой системе процесса, несмотря на то, что Path не отображается по умолчанию. Как показано ниже, Свойство Path содержит расположение исполняемого файла процесса в файловой системе.

 (Get-Process -Name «Калькулятор»).Путь
 

Использование Get-Process для отображения полного пути файловой системы процесса в Windows.

Как и в Windows, Get-Process в Linux также возвращает путь к файловой системе. В приведенном ниже примере запущен процесс gnome-calculator с путем, отображаемым в выводе консоли.

 (Get-Process -Name 'gnome-calculator'). Путь
 

Использование Powershell Get-Process для отображения полного пути файловой системы процесса в Linux.

Коварные злоумышленники могут назвать процесс таким же или похожим на доверенный. Таким образом, возможность найти путь к файловой системе помогает в сценарии реагирования на инциденты безопасности (IR). Читайте дальше, чтобы узнать, как найти владельца процесса, поскольку Имя пользователя не включено в выходные данные по умолчанию.

Поиск владельца процесса

Чтобы включить значение UserName в выходные данные, вам потребуется использовать Параметр IncludeUserName . Важно знать владельца процесса, особенно во избежание непреднамеренного завершения процесса другого пользователя. Как показано ниже, свойство UserName теперь включено в выходные данные процесса.

 Get-Process -Name «Калькулятор» -IncludeUserName
 

Отображение владельца процесса Calculator в Windows.

Наконец, читайте дальше, чтобы узнать об использовании Get-Process на удаленном компьютере для получения информации о процессе!

Поиск процессов на удаленных компьютерах

Хотя в Windows PowerShell Get-Process не имеет каких-либо удаленных возможностей, вы всегда можете использовать PowerShell Remoting и Invoke-Command для запуска на удаленных компьютерах. Связано: Как настроить PSRemoting для Windows и Linux удаленные компьютеры.

 Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'
 

Параметр -ComputerName был удален в PowerShell 7.x, поскольку командлет не имеет прямого отношения к удаленному взаимодействию. Чтобы добиться того же, вы можете обернуть то же самое в Invoke-Command , например: Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }

Когда приведенная выше команда запускается на удаленном компьютере, отображается тот же вывод, как если бы Команда Get-Process была запущена локально.