Выполнить команду на удалённом компьютере
Как выполнить команду на удалённом компьютере? Самый распространенный вопрос у системных администраторов. К этому можно отнести запуск какой либо команды на удалённом компьютере, не вставая со своего места. Можно конечно использовать 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.
Хотя вроде бы все нормально, лучше внести парочку улучшений. Например, добавить отображение свободного места в гигабайтах, а не байтах. Этим мы и займемся.
Чтобы это сделать создадим функцию Get-DiskUtil. Хотя в предыдущем примере мы все делали интерактивно, в этом случае давайте запишем функцию в файл, загрузим в ваш профиль к другим скриптам, которые можно использовать позже.
А вот и сама функция:
Давайте ее разберем.
Функция берет имя компьютера как параметр и задает его как имя локального компьютера по умолчанию.
Затем мы используем фрагмент скрипта Process, где свойство “имя компьютера” передается в функцию. “
[H1toH2]
” указывает, что имя компьютера задается как переменная. В противном случае имя компьютера как будет воспринято как параметр.
Далее следует выражение GetWmiObject.
Вывод этого выражения передается в командлет Select-Object (сокращенно Select). Мы используем хеш-таблицы, чтобы создать пользовательское свойство под названием Computername. Фактически будет осуществлено переименование SystemName текущего объекта (
) в Computername. DeviceID остается неизменным.
Сделаем еще парочку хеш-таблиц. Первая берет свойство Size и делит его на 1GB, вывод будет с двумя знаками после запятой и переименовывает свойство в SizeGB. Вторая производит то же самое со свойством Freespace.
Затем создаем свойство UsedGB, которого нет в WMI. Вычисляется разница между свойствами Size и FreeSpace и делится на 1GB.
В конце создаем еще одно свойство PerFree – свободно в процентах. Оно завершает функцию.
Ниже приведена работа функции для компьютера CHI-FP01, выведенная в таблице (Format-Table (или ft)) с авто форматированием (параметр –auto).
Все и так хорошо, но от этой функции мы можем получить больше. Поэтому предположим, что вам нужно еженедельно получать отчет об использовании дисков на всех серверах в вашей компании. Посмотрим, как этого можно достичь.
Для начала сохраним результаты нашего выражения в переменную $data, чтобы каждый раз не набирать эту команду. Затем, передадим результаты в объект where, пропингуем сервера (дважды) и передадим имя компьютера в созданную нами функцию Get-DiskUtil.
Данные будут храниться в переменной $data. Вы можете вытащить информацию из $data и отсортировать по computername, применив –auto. Информация также может быть направлена на печать (Out-Printer) или в файл (Out-File).
Конвертируем в csv:
Потом Вы можете импортировать этот csv файл для получения снимка статуса использования дисков на момент запуска команды:
И напоследок: я покажу, как создать HTML отчет, доступ к которому можно получить из любого места.
Берем $data и передаем ее в Sort Computername. Результат передается в командлет ConvertTo-HTML. Вы можете присвоить заголовок и путь CSS. CSS необходим, так как ConverToHTML не обладает возможностями форматирования. Поэтому если вы хотите, чтобы отчет выглядит прилично, понадобится CSS файл. На последнем этапе пишем результат в файл.
Теперь файл готов, его можно посмотреть с помощью команды start.
Пример HTML отчета.
Помните, что информацию необходимо держать информацию актуальной.
Вторую часть перевода смотрите здесь.
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 или Пуск — Выполнить и введите следующие команды:
Разберем ключи команды подробнее:
- s — выключение компьютера
- r — перезагрузка
- f — принудительное завершение мешающих перезагрузке процессов
- t — время, через которое завершение работы будет выполнено, указывается в секундах через пробел. Если данный параметр не используется команда будет выполнена через 60 секунд.
Выход пользователя через командлет Stop-TerminalSession
Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:
Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.
Как видите сессия 427 больше не существует, и у нас с помощью командлета Stop-TerminalSession получилось выкинуть пользователя из RDS сеанса. На этом у меня все. Остались вопросы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.