Как работать с процессами через Powershell Get-Process

Как завершить процесс с помощью PowerShell

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

PowerShell поставляется с полезным командлетом «Stop-Process». Это позволяет завершить один или несколько процессов. Есть несколько способов его использования.
Давайте посмотрим, как.

Как завершить процесс с помощью PowerShell

  1. Завершить процесс по его идентификатору
  2. Завершить процесс по его имени

Как вывести детальную информацию через Powershell Get-Process

Что бы вывести всю возможную информацию два варианта. Это либо вывести объект в виде листа:

Либо можно объявить в переменную, получить все имена свойств и вызывать их по отдельности:

Свойства Powershell Get-Process

Под такой командой powershell я могу узнать имя, которое пишется в окошке:

Get-Process Powershell Title

Свойств, которые хранит объект процесса (то что мы видим при $result | Get-Member) очень много и это главное, к чему нужно обращаться когда мы хотим узнать подробнее об объекте.

Так мы выведем все запущенные процессы, у которых есть GUI:

Все процессы с GUI через Powershell Get-Process

How to Kill process from PowerShell

Powershell provides command Stop-Process to kill a process from command prompt. This command can take in process Id, process name etc and can kill process from CMD.

Below is an example command to kill a process using name of the application or image file.

For example, to kill chrome application using powershell

Note that this command does not ask for confirmation and straight away kill the running process. If the application is running multiple instances on the computer(For example, multiple firefox windows) it kills each of those processes. If you would like to kill a specific instance, you should use processId argument with Stop-Process command.

Приемы работы с удаленными системами через PowerShell

Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

image

Автор: Scott Sutherland

Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

Первоначальные настройки

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

1. Запустите консоль PowerShell от имени администратора и выполните следующую команду:

Команда выше разрешает запуск команд на удаленных системах. Если у вас возникли проблемы, используйте команды ниже:

2. Убедитесь в том, что служба WinRM запускается автоматически.

# Устанавливаем нужный режим

Set-Service WinRM -StartMode Automatic

# Проверяем, что служба запущена

Get-WmiObject -Class win32_service | Where-Object

3. Устанавливаем у всех хостов статус «достоверный» (можно сделать позже).

# Доверяем всем хостам

Set-Item WSMan:localhostclienttrustedhosts -value *

# Проверяем настройку достоверных хостов

Примеры работы с удаленными системами

Перед ознакомлением с примерами рекомендую вам прочитать прекрасную статью, посвященную работе с удаленными командами в PowerShell.

Запуск одиночной команды на удаленной системе

Команда «Invoke-Command» предназначена для запуска команд на удаленных системах. Можно работать от имени текущего пользователя, либо использовать стороннюю учетную запись, если вы работаете в системе, которая не является частью домена:

Invoke-Command –ComputerName MyServer1 -ScriptBlock
Invoke-Command –ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock

Если установлен модуль для работы с ActiveDirectory, становится возможным запуск команд на множестве систем при помощи каналов (pipeline):

Get-ADComputer -Filter * -properties name | select @> |
Invoke-Command -ScriptBlock

Иногда на удаленной системе требуется запустить скрипт, хранящийся локально:

Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1 -Credentials demoserveradmin

Если вы генерируете команды или функции динамически, которые затем передаются на удаленную систему можно использовать связку команд invoke-expression и invoke-command:

$MyCommand = «hostname»
$MyFunction = «function evil ;evil»
invoke-command -ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock
-ArgumentList $MyFunction

Организация интерактивной консоли на удаленной системе

Организовать интерактивную консоль в PowerShell на удаленной системе можно при помощи команды «Enter-PsSession» (немного похожа на SSH). Команда «Enter-PsSession» также запускается либо от имени текущего пользователя, либо при помощи альтернативной учетной записи:

Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession –ComputerName server1.domain.com –Credentials domainserveradmin

Закрытие сессии выполняется при помощи команды «Exit-PsSession»:

Создание фоновых сессий

Еще одна полезная возможность позволяет создавать фоновые сессии (команда «New-PsSession»). Фоновые сессии могут оказаться полезны при запуске множества команд во множестве систем. Как и предыдущие команды, команда «New-PsSession» запускается от имени текущего пользователя, либо при помощи альтернативной учетной записи:

New-PSSession -ComputerName server1.domain.com
New-PSSession –ComputerName server1.domain.com –Credentials domainserveradmin

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

New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root »
» -Server a.b.c.d -credential domainuser
cd RemoteADS:
Get-ADComputer -Filter * -Properties name | select @>
| New-PSSession

Вывод перечня фоновых сессий

Как только создано несколько фоновых сессий, можно просмотреть их перечень при помощи команды «Get-PsSession».

Взаимодействие с фоновыми сессиями

Первое время у меня было ощущение схожее с тем, как я работал с сессиями в MetaSploit. Однако фоновые сессии в PowerShell чуть более стабильны. Ниже показан пример взаимодействия при помощи идентификатора сессии:

Enter-PsSession –id 3

Для выхода из сессии используйте команду «Exit-PsSession». Сессия перейдет обратно в фоновый режим.

Запуск команд через фоновые сессии

Если вы хотите выполнить команду во всех активных сессиях, используйте связку команд «Invoke-Command» и «Get-PsSession».

Invoke-Command -Session (Get-PSSession) -ScriptBlock

Удаление фоновых сессий

Для удаления всех активных сессий используйте команду «Disconnect-PsSession»

Удаленные команды в PowerShell открывают огромные возможности, как для администраторов, так и для пентестеров. Вне зависимости от ситуации, как вы будете работать с удаленными системами, все сводится к следующему:

  • Для запуска одиночной команды на удаленной системе используйте «Invoke-Command».
  • Для взаимодействия с одиночной системой используйте «Enter-PSSession».
  • Если вы хотите запускать множество команд во множестве систем, используйте фоновые сессии.

Надеюсь, эта статья оказалась для вас полезной.

Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!

Как с помощью PowerShell завершать процессы в Windows 10

З авершить в принудительном режиме зависший или ненужный процесс в Windows можно несколькими способами — с помощью Диспетчера задач , командной строки , сторонних утилит вроде Process Explorer. Также это можно сделать с помощью оболочки PowerShell — более совершенного аналога командной строки CMD, которая в будущем должна будет заменить собою последнюю.

Для завершения процессов в PowerShell предусмотрен отдельный командлет Stop-Process, позволяющий «убивать» один или несколько процессов сразу. Способов завершения процесса в PowerShell два — через идентификатор процесса и через его имя, используйте какой вам удобнее. Относящийся к первому способу командлет имеет такой синтаксис:

Где id_process — идентификатор процесса.

Для получения списка ID активных процессов используется командлет Get-Process . Допустим, вы хотите завершить зависший браузер Edge. Выполните в PowerShell команду Get-Process и посмотрите, какой ID имеет процесс MicrosoftEdge .

Get-Process

В данном примере это 2196. Следовательно, команда завершения будет такой:

Выполните её и работа Edge будет немедленно завершена.

Stop-Process

Вместо идентификатора можно использовать имя процесса, только в этом случае потребуется указать ключ –processname. Вот так:

Результат будет точно таким же.

Stop-Process -processname

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

Вышеприведённая команда завершит работу сразу двух программ — браузера Edge и редактора реестра .

Завершить работу нескольких приложений

Тут, пожалуй, стоит сказать о некоторой особенности командлета Stop-Process. Если с его помощью вы попробуете завершить работу Проводника , то последний будет перезапущен , а не закрыт.

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

Вики IT-KB

Пример того, как на клиентской машине с помощью PowerShell и WMI получить информацию о всех выполняемых процессах на удалённом сервере:

Пример того, как удалённо закрыть процесс, зная его идентификатор PID.
Например, закроем процесс с PID 5660 :

Пример того, как удалённо закрыть процесс по маске его исполняемого файла.
Например, закроем все процессы с испоняемым файлом notepad.exe :

Проверено на следующих конфигурациях:

Версия ОС / PowerShell (сервер) Версия ОС / PowerShell (клиент)
Windows Server 2012 R2 Standard / PowerShell 4.0 Windows 10 1803 (10.0.17134) / PowerShell 5.1

Автор первичной редакции:
Алексей Максимов
Время публикации: 28.05.2018 18:44

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector