Удаленно завершить процесс на компьютере в домене

Выполнить команду на удалённом компьютере

Как выполнить команду на удалённом компьютере? Самый распространенный вопрос у системных администраторов. К этому можно отнести запуск какой либо команды на удалённом компьютере, не вставая со своего места. Можно конечно использовать DameWare Mini Remote Control но это не то. И это и то может быть необходимо для установки программы или утилиты, изменения каких либо настроек, или для чего угодно ещё. И конечно, редко речь идёт лишь об одном компьютере, чаще команду нужно выполнить на множестве рабочих станций или серверов.

Так как задача эта популярная, то и способов её решения существует множество. Начиная от групповых политик (в которых можно применять для этой цели сценарии входа в систему или автозагрузки), и заканчивая мощными системами управления, вроде System Center Essentials или System Center Configuration Manager. Но я в этой статье хочу рассмотреть методы, которые доступны сразу из командной строки или файлов сценариев, а так же не требуют предварительной установки агентов и прочей суматохи. Впрочем, какие-то предварительные требования конечно есть. Например, у вас должны быть административные полномочия на том компьютере, на котором вы хотите выполнить команду (за исключением сценария с «проксированием», но об этом позже).

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

Запустите командную строку через меню «Пуск» или воспользуйтесь инструментом «Выполнить» , введя в строку CMD . Команда, которая выполняет завершение процесса, называется TASKKILL , еще ее называют «убийца» процесса.
TASKKILL позволяет завершить не только процесс по его имени, но и по номеру идентификатора процесса.
Чтобы завершить приложение по имени его процесса необходимо знать имя этого процесса. В большинстве случаев имя процесса совпадает с именем исполняемого файла. Например, для завершения процесса браузера Opera в командной строке введите:

Если вы откроете «Диспетчер задач» и посмотрите на процессы, работающие в данный момент, то можете заметить, что в списке могут находиться несколько одноименных процессов, например svchost.exe. Чтобы завершить не все процессы с одноименным именем, а только один из них следует использовать номер идентификатор процесса или PID. Чтобы узнать PID процессов, необходимо в командной строке ввести команду TASKLIST , которая высветит список всех процессов с их PID.
Для завершения процесса по его PID введите в командную строку:

Через командную строку можно завершить дочерние процессы, для этого используют флаг /T:

Все процессы, которые были связаны с завершаемым процессом, также будут завершены, если это возможно.

Завершение процесса по его PID

Еще процесс можно завершить по его идентификатору в системе — удобно, в том случае, если Вам нужно завершить какой-то определенный процесс, имя которого, к примеру, совпадает с именами других процессов. Получить PID можно выполнив команду tasklist :

Найдя нужный процесс и его PID, можно перейти к его завершению. Делается это так:

где вместо _PID_ должен быть настоящий PID процесса.

PowerShell: управление процессами на удаленном компьютере

С помощью аргумента ComputerName командлет Get-Process позволяет управлять процессами на удаленных компьютерах (должен быть включен и настроен WinRM).

Get-Process -ComputerName dc01, dc02| Format-Table -Property ProcessName, ID, MachineName

Мы рассматриваем встроенные возможности комнадлета Get-Process для управления процессами на удаленных компьютерах. Здесь не учитываются возможности PowerShell Remoting, которые доступны в командлетах Invoke-Command и Enter-PSSession.

Если вы хотите завершить процесс на удаленном компьютере, имейте в виду, что у командлета Stop-Process отсутствует параметр –ComputerName. Для завершения процесса на удаленном компьютере можно использовать такой PowerShell код:

$RProc = Get-Process -Name notepad -ComputerName dc01
Stop-Process -InputObject $RProc

Создаем отчет об использовании дисков

Администраторы должны отслеживать свободное место, оставшееся на серверах. Это можно сделать, использовав WMI и класс Win32_LogicalDisk, которые дают нам информацию такую как ID устройства, размер диска, свободное места и прочую информацию.
Через WMI мы можем обращаться к локальным и удаленным компьютерам. Мы также можем выполнять эти запросы как одной, так и нескольких машинах. Также мы можем: экспортировать данные в .csv или базу данных, создавать текстовый или HTML-отчет или просто вывести результаты на экран.
Пример команды, выполняемой на локальном компьютере.

Мы используем командлет GetWmiObject для возвращения информации из класса Win32_LogicalDisk. Затем мы применяем -filter чтобы возвратить только информацию, для которой справедливо утверждение drivetype=3, которое означает фиксированные логические диски, типа C:. Это значит, что информация относительно о USB и сетевых дисках не будет включена. Полученная информация будет записана в файл Disks.txt.
Пример в PS.

image

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

image

Давайте ее разберем.
Функция берет имя компьютера как параметр и задает его как имя локального компьютера по умолчанию.

image

Затем мы используем фрагмент скрипта Process, где свойство “имя компьютера” передается в функцию. “
[H1toH2]

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

image

Далее следует выражение GetWmiObject.

image

Вывод этого выражения передается в командлет Select-Object (сокращенно Select). Мы используем хеш-таблицы, чтобы создать пользовательское свойство под названием Computername. Фактически будет осуществлено переименование SystemName текущего объекта (

) в Computername. DeviceID остается неизменным.

image

Сделаем еще парочку хеш-таблиц. Первая берет свойство Size и делит его на 1GB, вывод будет с двумя знаками после запятой и переименовывает свойство в SizeGB. Вторая производит то же самое со свойством Freespace.

image

Затем создаем свойство UsedGB, которого нет в WMI. Вычисляется разница между свойствами Size и FreeSpace и делится на 1GB.

image

В конце создаем еще одно свойство PerFree – свободно в процентах. Оно завершает функцию.

image

Ниже приведена работа функции для компьютера CHI-FP01, выведенная в таблице (Format-Table (или ft)) с авто форматированием (параметр –auto).

image

Все и так хорошо, но от этой функции мы можем получить больше. Поэтому предположим, что вам нужно еженедельно получать отчет об использовании дисков на всех серверах в вашей компании. Посмотрим, как этого можно достичь.
Для начала сохраним результаты нашего выражения в переменную $data, чтобы каждый раз не набирать эту команду. Затем, передадим результаты в объект where, пропингуем сервера (дважды) и передадим имя компьютера в созданную нами функцию Get-DiskUtil.

image

Данные будут храниться в переменной $data. Вы можете вытащить информацию из $data и отсортировать по computername, применив –auto. Информация также может быть направлена на печать (Out-Printer) или в файл (Out-File).

image

Конвертируем в csv:

image

Потом Вы можете импортировать этот csv файл для получения снимка статуса использования дисков на момент запуска команды:

image

image

И напоследок: я покажу, как создать HTML отчет, доступ к которому можно получить из любого места.
Берем $data и передаем ее в Sort Computername. Результат передается в командлет ConvertTo-HTML. Вы можете присвоить заголовок и путь CSS. CSS необходим, так как ConverToHTML не обладает возможностями форматирования. Поэтому если вы хотите, чтобы отчет выглядит прилично, понадобится CSS файл. На последнем этапе пишем результат в файл.

image

Теперь файл готов, его можно посмотреть с помощью команды start.

image

Пример HTML отчета.

image

Помните, что информацию необходимо держать информацию актуальной.

Вторую часть перевода смотрите здесь.

P.S. Не могли не обратить внимание, что та же задача получения информации о свободном месте на дисках может решаться с помощью нашей бесплатной программы NetWrix Disk Space Monitor.
Посмотреть как программа работает можно на youtube, cкачать здесь , а активировать бесплатную лицензию без ограничения срока действия (и вообще без каких либо ограничений) можно используя следующие данные:

License name: NetWrix Disk Space Monitor Freeware License
License count: 1000000
License code: EhEQEhoaEhEQEhYTEhYaExQa

[/H1toH2]

PsFile

Эта команда показывает файлы, которые в данный момент открыты по сети на локальном или удаленном ПК, и работает аналогично команде Windows «net file». Синтаксис такой же, как и любая другая команда в наборе.

Да, этот не такой веселый, как последний.

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

Командная строка

Как обычно, если графические инструменты не помогают, на помощь администратору приходит командная строка. Для того, чтобы управлять питанием компьютера с ее помощью не надо обладать особыми знаниями, достаточно запомнить одну простую команду. Нажмите Win+R или Пуск — Выполнить и введите следующие команды:

rdp-shutdown-005.jpg

Разберем ключи команды подробнее:

  • s — выключение компьютера
  • r — перезагрузка
  • f — принудительное завершение мешающих перезагрузке процессов
  • t — время, через которое завершение работы будет выполнено, указывается в секундах через пробел. Если данный параметр не используется команда будет выполнена через 60 секунд.

Выход пользователя через командлет Stop-TerminalSession

Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:

Get-TerminalSession

Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.

Stop-TerminalSession

Как видите сессия 427 больше не существует, и у нас с помощью командлета Stop-TerminalSession получилось выкинуть пользователя из RDS сеанса. На этом у меня все. Остались вопросы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

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

Adblock
detector