Как подключиться к другому компьютеру через командную строку windows

Приветствую. Иногда возникают задачи когда нужно что-либо сделать на удаленном компьютере, при этом либо нет возможности подключиться по RDP, например, если вдруг сервер сильно загружен, и ему не хватит ресурсов для запуска терминальной сессии (да да, у меня такое встречалось, не сказать что часто, но бывало ). Либо из командной строки задачу сделать быстрее. Ну или еще как вариант, если нужно что то сделать скрытно, в том случае если пользователь в момент когда это нужно сделать работает за компьютером. Пользователям Linux с этим гораздо проще, у них есть ssh.

Приветствую. Иногда возникают задачи когда нужно что-либо сделать на удаленном компьютере, при этом либо нет возможности подключиться по RDP, например, если вдруг сервер сильно загружен, и ему не хватит ресурсов для запуска терминальной сессии (да да, у меня такое встречалось, не сказать что часто, но бывало smiley). Либо из командной строки задачу сделать быстрее. Ну или еще как вариант, если нужно что то сделать скрытно, в том случае если пользователь в момент когда это нужно сделать работает за компьютером. Пользователям Linux с этим гораздо проще, у них есть ssh. Но и в Windows есть возможность подключаться, с позволения сказать, в командную строку.

В общем и целом на помощь к нам приходят утилиты SysInternals, а именно — pstools, а еще конкретнее — psexec из этого набора утилит. Скачать это добро можно здесь.

После того как скачали, нужно эти утилиты разархивировать куда-нибудь. Я обычно на диске C: создаю папку ps, что бы удобнее было добираться до утилит. Установки они не требуют. Для того что бы подключиться к удаленному компьютеру в командной строке набираем:

c:psPsExec.exe \192.168.1.114 -u domainuser -p password cmd

За место cmd можно например запустить какой-нибудь батник или другую команду.

Видео по теме:

9 6

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<


Для выполнения команд на удалённом ПК можно использовать утилиту psexec из набора PsTools, который можно скачать с официального сайта Microsoft.

Содержание

  • 1 Запуск командной строки на удалённом ПК
  • 2 Переименование удалённого ПК
  • 3 Отключение брандмауэра
  • 4 Включение удалённого рабочего стола
  • 5 Добавление пользователя в локальную группу

Запуск командной строки на удалённом ПК

Для подключения можно использовать IP адрес или имя компьютера:

psExec64.exe \192.168.2.68 cmd

или если хотим подключиться не от имени текущего пользователя, то:

PsExec.exe \192.168.2.68 -u ДоменПользователь -p Пароль cmd

Если ПК не в домене, то вместо «Домен» указываем имя ПК.

После удачного подключения изменится заголовок окна.

Переименование удалённого ПК

Текущее имя ПК можно увидеть через запрос к значению в реестре:

reg query «HKLMSYSTEMCurrentControlSetControlComputerNameComputerName» /v ComputerName

Изменяем в реестре имя ПК на New-PC-Name:

reg add «HKLMSYSTEMCurrentControlSetControlComputerNameComputerName» /v ComputerName /t REG_SZ /d «New-PC-Name» /f

reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v ComputerName /t REG_SZ /d «New-PC-Name» /f

Для вступления в силу нового имени нужно перезагрузить компьютер:

shutdown /r /f /t 180

Здесь мы дали пользователю 3 минуты (180 секунд) на закрытие документов, но можно этот параметр изменить в соответствии со случаем.

Отключение брандмауэра

Отключаем брандмауэр для всех профилей сети:

netsh advfirewall set allprofiles state off

Включение:

netsh advfirewall set allprofiles state on

Включение удалённого рабочего стола

Проверить есть ли доступ к удалённому рабочему столу можно с помощью команды telnet, попробовав подключиться к соответствующему порту. Для Windows штатным является подключение по протоколу RDP на порт 3389 (хотя, конечно, и порт для RDP можно изменить и использовать другие протоколы). В случае открытого порта (подключения разрешены) мы увидим приглашение командной оболочки telnet:

telnet 192.168.2.68 3389

Trying 192.168.2.68…
Connected to 192.168.2.68.
Escape character is ‘^]’.

Если же подключение запрещено, то команда зависнет на этапе «Trying 192.168.2.68…»

Даже если удалённое подключение к рабочему столу отключено его можно удалённо же и включить, а затем подключиться как обычно. Для этого внесём изменение в реестр удалённого ПК.

Если мы получили доступ к командной строке удалённого ПК (см. PsExec выше), то выполняем:

reg add «HKLMSYSTEMCurrentControlSetControlTerminal Server» /v fDenyTSConnections /t REG_DWORD /d 0 /f

Иначе, можно подключиться к реестру через оснастку.

1) Запускаем на удалённом ПК службу «Удаленный реестр«.

  • Входим в локальную оснастку «Службы»:

services.msc

  • Подключаемся к службам удалённого ПК: в боковом меню Службы в контекстном меню выбрать «Подключиться к другому компьютеру…»
  • Находим службу «Удаленный реестр» и меняем тип запуска на «Вручную»
  • Запускаем службу: кнопка «Запустить»

2) Подключаемся к реестру удалённого ПК.

  • На локальном ПК запускаем редактор реестра:

regedit

  • В верхнем меню выбираем: Файл — Подлкючить сетевой реестр…
  • Вводим имя ПК, нажимаем «ОК» и должен появиться дополнительный куст с именем ПК и двумя ветками: HKEY_LOCAL_MACHINE и HKEY_USERS
  • Спускаемся по веткам до HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server
  • Меняем параметр fDenyTSсonnections с 1 на 0

Пробуем подключиться:

mstsc

3) Если подлкючиться не удаётся, то нужно ещё донастроить брандмауэр на удалённом ПК

  • Получаем досутп к командной строке удалённого ПК с помощью PsExec:

psExec64.exe \192.168.2.68 cmd

  • Добавляем разрешающее правило в брандмауэр Windows на удалённое подключение к рабочему столу (порт 3389):

netsh advfirewall firewall add rule name=»Allow Remote Desktop» dir=in protocol=TCP localport=3389 action=allow

См. также

  • Включить RDP Windows удаленно и локально, за минуту — подробная инструкция со скриншотами

Добавление пользователя в локальную группу

1) Если у нас есть возможноть удалённого управления ПК, то проще всего запустить на локальном ПК Оснастку управелния компьютером

compmgmt.msc

и подключиться к удалённому ПК:

  1. Щёлкнуть правой клавишей мышы по корневому пункту бокового меню «Управление компьютером» и выбрать в контекстном меню пункт «Подключиться к другому компьютеру…«
  2. Ввести имя или IP адрес ПК или нажать «Обзор…» и поискать в домене

После подключения выбрать в боковом меню: Локальные пользователи и группы — Группы

И добавить нужных пользователей в нужную группу.

2) Если возможности удалённого управления нет, то можно попробовать его получить отключив брандмауэр на удалённом ПК и включив на нём службу «Удаленный реестр» (см. выше). Или получив с помощью утилиты psExec доступ к командной строке на удалённом ПК управлять пользователями и группами через командную строку.


В наше время даже для собак придумали удаленное управление.

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

В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с ПетейНе-Петей, когда все бросились проверятьотключать SMBv1 и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.

Когда-то давно я устроился работать в организацию в период эпидемии KidoConficker. Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer, которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.

Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.

Способы старые, временем проверенные

Psexec

Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.

В качестве примера посмотрим, установлено ли обновление, закрывающее нашумевшую уязвимость SMB на списке компьютеров:

psexec @computers.txt /u USER /p PASS cmd.exe /v /c ""systeminfo | find "KB4012212" || echo !computername! >> \serversharelog.txt"""

В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \*. В файле \serversharelog.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n.

Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.

К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.

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

WMIC

Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.

Для работы с WMI из консоли создана wmic.exe. Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:

wmic /node:"servername" qfe get hotfixid | find "KB4012212"

Использовать список компьютеров также можно командой /node:»@computers.txt».

Еще при помощи WMI можно запускать программы – синтаксис предельно прост:

wmic /node:"servername" process call create "cmd /c somecommands"

К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.

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

Групповые политики и скрипты

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


Скрипты, выполняющиеся при старте и завершении системы.


Скрипты, выполняющиеся при входе и выходе пользователя из системы.

Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.

Назначенные задания

Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe, выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации, я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).

Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ― «Настройка ― Параметры панели управления ― Назначенные задания».


Создание нового назначенного задания.

Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».

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

Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:

SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "5.1%" AND ProductType = "1"

В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.


Запускаем немедленную задачу только один раз.

При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ― Конфигурация Windows ― Файлы».

Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.

Через реестр

Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:

reg add \COMPUTERHKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce /v script /t Reg_SZ /d "script.cmd"

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

Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd, но эти методы уже из серии «можно, но не нужно».

Теперь перейдем к новым инструментам.

Способы новые или куда же без PowerShell

PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.

Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:

Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации.

После того как все компьютеры будут готовы принимать запросы, мы сможем подключаться при помощи соответствующих командлетов PowerShell. Для проверки возможности подключения используется командлет Test-WSMan.


Проверка возможности подключения.

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

Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME

Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.


Смотрим содержимое диска С удаленного компьютера.

Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.


Работаем в консоли удаленного компьютера.

Напомню, что с помощью JEA можно ограничить доступные подобной сессии командлеты или дать доступ нужным без прав администратора.

Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.

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

Кстати, поделитесь вашими способами скрытого и не очень запуска программ на удаленных компьютерах. Ну, за исключением эксплойтов.

Возникла задача выполнить кое-какую операцию с помощью командной строки на другом компьютере, само собой идти к пользователю запускать командную строку и вбивать команды- не наш метод, нам надо не вставая с кресла запустить командную строку удаленного компьютера и выполнить необходимые действия в командной строке. Конечно, подобное действие можно выполнить с помощью программ удаленного подключения, но это не всегда удобно и требует наличия подобной программы у вас и у пользователя (клиент- сервер). Процедуру по подключению к командной строки другого компьютера, можно выполнить значительно просто, с помощью команды PSEXEC.

PsExec — это утилита командной строки, с возможность вызывать в интерактивном режиме интерфейс командной строки в удаленных системах Windows и удаленно запускать различные команды.

Эта утилита ставиться на только на компьютер администратора. Для установки необходимо ее скачать, вот ссылка на официальный сайт Microsoft . После скачивания архива его необходимо разархивировать, в разархивированной папке найти файл PsExec.exe. Нажмите на нем два раза, появиться окно с лицензионным соглашением, нажимаем «Agree«.

На этом установка PSEXEC можно считать оконченной.

Разберем синтаксис команды:

psexec [\компьютер[,компьютер2[. ] | @файл][-u пользователь [-p пароль]][-n s][-l][-s|-e][-x][-i [сеанс]][-c [-f|-v]][-w каталог][-d][-<приоритет>][-a n,n. ] программа [аргументы]

компьютер Указывает программе PsExec, что нужно запустить приложение на заданном компьютере или компьютерах. Если имя компьютера не указано, то программа PsExec запустит приложение в локальной системе, если же вместо имени компьютера задан символ «звездочка» (\*), то программа PsExec запустит приложение на всех компьютерах текущего домена.

@файл Указывает программе PsExec, что нужно запустить приложение на всех компьютерах, перечисленных в заданном текстовом файле.

-a Процессоры, на которых можно запустить приложение, отделяются запятыми, при этом процессоры нумеруются, начиная с 1. Например, чтобы запустить приложение на процессорах втором и четвертом, введите «-a 2,4»

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

-d Указывает, что не нужно ждать завершения приложения. Этот параметр следует использовать только при запуске неинтерактивных приложений.

-e Указанный профиль учетной записи не загружается.

-f Указанная программа копируется в удаленную систему, даже если такой файл в удаленной системе уже есть.

-i Запускаемая программа получает доступ к рабочему столу указанного сеанса в удаленной системе. Если сеанс не задан, то процесс выполняется в консольном сеансе.

-l При запуске процесса пользователю предоставляются ограниченные права (права группы администраторов отменяются, и пользователю предоставляются только права, назначенные группе «пользователи»). В ОС Windows Vista процесс запускается с низким уровнем благонадежности.

-n Позволяет задать задержку подключения к удаленным компьютерам (в секундах).

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

-s Удаленный процесс запускается из системной учетной записи.

-u Позволяет указать необязательное имя пользователя для входа в удаленную систему.

-v Указанный файл копируется в удаленную систему вместо уже имеющегося только при условии, что номер его версии выше или он более новый.

-w Позволяет указать для процесса рабочий каталог (путь внутри удаленной системы).

-x Отображает интерфейс пользователя на рабочем столе Winlogon (только в локальной системе).

-приоритет (приоритет) Позволяет задавать для процесса различные приоритеты: -low (низкий), -belownormal (ниже среднего), -abovenormal (выше среднего), -high (высокий) или -realtime (реального времени).

программа Имя запускаемой программы.

аргументы Передаваемые аргументы (обратите внимание, что пути файлов должны указываться как локальные пути в целевой системе).

Примеры работы команды PSEXEC:

1) Для того чтобы запустить командную строку другого компьютера, необходимо ввести
psexec \<имя компьюетра> cmd

например:
psexec \WIN782 cmd

после этого можете вводить необходимые вам команды.

2) Для того чтобы запустить какою либо программу (в данном примере test.exe) на удаленном компьютере необходимо выполнить команду, (эта команда копирует программу test.exe в удаленную систему и выполняет ее в интерактивном режиме).

psexec \<имя компьютера> -c test.exe

например:
psexec \WIN782 -c test.exe

3) Если в удаленной системе такая программа уже установлена и находится не в системном каталоге, укажите полный путь к этой программе

Windows/Удалённое управление

Для выполнения команд на удалённом ПК можно использовать утилиту psexec из набора PsTools, который можно скачать с официального сайта Microsoft.

Содержание

Запуск командной строки на удалённом ПК

Для подключения можно использовать IP адрес или имя компьютера:

или если хотим подключиться не от имени текущего пользователя, то:

Если ПК не в домене, то вместо «Домен» указываем имя ПК.

После удачного подключения изменится заголовок окна.

Переименование удалённого ПК

Текущее имя ПК можно увидеть через запрос к значению в реестре:

Изменяем в реестре имя ПК на New-PC-Name:

reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v ComputerName /t REG_SZ /d «New-PC-Name» /f

Для вступления в силу нового имени нужно перезагрузить компьютер:

Здесь мы дали пользователю 3 минуты (180 секунд) на закрытие документов, но можно этот параметр изменить в соответствии со случаем.

Отключение брандмауэра

Отключаем брандмауэр для всех профилей сети:

Включение удалённого рабочего стола

Проверить есть ли доступ к удалённому рабочему столу можно с помощью команды telnet, попробовав подключиться к соответствующему порту. Для Windows штатным является подключение по протоколу RDP на порт 3389 (хотя, конечно, и порт для RDP можно изменить и использовать другие протоколы). В случае открытого порта (подключения разрешены) мы увидим приглашение командной оболочки telnet:

Trying 192.168.2.68. Connected to 192.168.2.68. Escape character is ‘^]’.

Если же подключение запрещено, то команда зависнет на этапе «Trying 192.168.2.68. «

Даже если удалённое подключение к рабочему столу отключено его можно удалённо же и включить, а затем подключиться как обычно. Для этого внесём изменение в реестр удалённого ПК.

Если мы получили доступ к командной строке удалённого ПК (см. PsExec выше), то выполняем:

Иначе, можно подключиться к реестру через оснастку.

1) Запускаем на удалённом ПК службу «Удаленный реестр«.

  • Входим в локальную оснастку «Службы»:
  • Подключаемся к службам удалённого ПК: в боковом меню Службы в контекстном меню выбрать «Подключиться к другому компьютеру. «
  • Находим службу «Удаленный реестр» и меняем тип запуска на «Вручную»
  • Запускаем службу: кнопка «Запустить»

2) Подключаемся к реестру удалённого ПК.

  • На локальном ПК запускаем редактор реестра:
  • В верхнем меню выбираем: Файл — Подлкючить сетевой реестр.
  • Вводим имя ПК, нажимаем «ОК» и должен появиться дополнительный куст с именем ПК и двумя ветками: HKEY_LOCAL_MACHINE и HKEY_USERS
  • Спускаемся по веткам до HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server
  • Меняем параметр fDenyTSсonnections с 1 на 0

3) Если подлкючиться не удаётся, то нужно ещё донастроить брандмауэр на удалённом ПК

  • Получаем досутп к командной строке удалённого ПК с помощью PsExec:
  • Добавляем разрешающее правило в брандмауэр Windows на удалённое подключение к рабочему столу (порт 3389):
    — подробная инструкция со скриншотами

Добавление пользователя в локальную группу

1) Если у нас есть возможноть удалённого управления ПК, то проще всего запустить на локальном ПК Оснастку управелния компьютером

и подключиться к удалённому ПК:

  1. Щёлкнуть правой клавишей мышы по корневому пункту бокового меню «Управление компьютером» и выбрать в контекстном меню пункт «Подключиться к другому компьютеру. «
  2. Ввести имя или IP адрес ПК или нажать «Обзор. » и поискать в домене

После подключения выбрать в боковом меню: Локальные пользователи и группы — Группы

И добавить нужных пользователей в нужную группу.

2) Если возможности удалённого управления нет, то можно попробовать его получить отключив брандмауэр на удалённом ПК и включив на нём службу «Удаленный реестр» (см. выше). Или получив с помощью утилиты psExec доступ к командной строке на удалённом ПК управлять пользователями и группами через командную строку.

7 способов выполнить команду на удалённом компьютере

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

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

PsExec.exe

Один из моих любимых способов для решения этой задачи это утилита командной строки PsExec.exe написанная Марком Руссиновичем, которую вы можете свободно скачать с сайта Windows SysInternals. Ссылку на неё вы можете найти в конце статьи. Она не требует установки в систему, вы можете просто скопировать её в одну из папок, содержащихся в переменной окружения %path% и вызывать из любой оболочки командной строки: Cmd или PowerShell.

Использовать PsExec очень просто. Например, чтобы выполнить ipconfig /flushdns на компьютере main, достаточно запустить следующую команду:

[code]psexec \main ipconfig /flushdns[/code]

Команда ipconfig будет запущена на компьютере main под вашими учетными данными. После завершения работы ipconfig весь текстовый вывод будет передан на ваш компьютер, а кроме того будет возвращён код выхода команды (error code). В случае если команда выполнилась успешно, он будет равен 0.

7 способов выполнить команду на удалённом компьютере

Разумеется, на этом возможности PsExec не заканчиваются. Вызвав утилиту без параметров, можно посмотреть другие доступные опции. Я обращу внимание лишь на некоторые из них.

Ключ -d говорит PsExec что ненужно дожидаться выполнения команды, а достаточно лишь запустить её, и забыть. В этом случае мы не получим выходных данных от консольной утилиты, но зато сможем не дожидаясь завершения предыдущей команды запускать другие. Это очень полезно, если вам необходимо запустить, например установщик программы на нескольких компьютерах.

По умолчанию PsExec выполняет команды в скрытом режиме, то есть на системе где выполняется команда, не будут выводиться никакие окна или диалоги. Однако есть возможность изменить это поведение, с помощью ключа -i . После него можно указать номер сессии, в которой выводить окна, а можно и не указывать, тогда интерфейс будет отображен в консольной сессии.

Таким образом, чтобы вывести окно с информацией о версии операционной системы на компьютере main, следует запустить PsExec таким образом:

[code]psexec -i \main winver.exe[/code]

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

[code]psexec @c:comps.txt systeminfo.exe[/code]

Ну и одной из самых полезных способностей PsExec является возможность интерактивного перенаправления ввода/вывода между компьютерами, что позволяет нам запустить, например, cmd.exe на удалённом сервере, а давать ему команды и получать результаты на локальном компьютере.

7 способов выполнить команду на удалённом компьютере

Каким образом работает PsExec?

Всё гениальное просто. В ресурсах исполняемого файла PsExec.exe находится другой исполняемый файл – PSEXESVC, который является службой Windows. Перед выполнением команды, PsExec распаковывает этот ресурс на скрытую административную общую папку удалённого компьютера, в файл: \ИмяКомпьютераAdmin$system32psexesvc.exe. Если вы с помощью ключа -c указали что необходимо скопировать исполняемые файлы на эту систему, они тоже скопируются в эту папку.

По завершению подготовительных действий, PsExec устанавливает и запускает службу, используя API функции Windows для управления службами. После того как PSEXESVC запустится, между ним и PsExec создаётся несколько каналов для передачи данных (вводимых команд, результатов, и т.д.). Завершив работу, PsExec останавливает службу, и удаляет её с целевого компьютера.

Windows Management Instrumentation (WMI)

Следующий способ реализации этой популярной задачи, о котором я хочу поведать – использование Windows Management Instrumentation. WMI присутствует во всех операционных системах Microsoft, начиная с Windows 2000, и даже на Windows 9x его можно установить из отдельного пакета. WMI включён по умолчанию, и не требует дополнительной настройки. Для его использования достаточно административных прав, и разрешенного на брандмауэре протокола DCOM. WMI предоставляет огромные возможности для управления системами, но нас сейчас интересует лишь одна из них.

Для запуска процессов нам потребуется метод Create класса Win32_Process. Использовать его достаточно несложно. В PowerShell это делается следующим образом:

[code]$Computer = “main”
$Command = “cmd.exe /c systeminfo.exe > \servershare%computername%.txt”
([wmiclass]”\$Computerrootcimv2:Win32_Process”).create($Command)[/code]

Здесь в качестве запускаемого процесса я указал cmd.exe, а уже ему, в качестве аргументов передал нужную команду. Это необходимо в случае если вам нужно использовать переменные окружения удалённого компьютера или встроенные операторы cmd.exe, такие как «>» для перенаправления вывода в файл. Метод Create не дожидается завершения процесса, и не возвращает результатов, но зато сообщает нам его идентификатор – ProcessID.

Если вы используете компьютер, на котором пока не установлен PowerShell, вы можете вызвать этот метод WMI и из сценария на VBScript. Например, вот так:

Листинг №1 – Запуск процесса используя WMI (VBScript)

[code]Computer = “PC3”
Command = “cmd.exe /c systeminfo.exe > \servershare%computername%.txt”
Set objWMIService = GetObject(“winmgmts:\” & Computer & “rootcimv2:Win32_Process”)
Result = objWMIService.Create(“calc.exe”, Null, Null, intProcessID)[/code]

Но гораздо проще воспользоваться утилитой командной строки wmic.exe которая предоставляет достаточно удобный интерфейс для работы с WMI и входит в состав операционных систем, начиная с Windows XP. В ней чтобы запустить, например калькулятор на компьютере main достаточно выполнить следующую команду:

[code]wmic /node:main process call create calc.exe[/code]

Разумеется, возможности WMI не ограничиваются только запуском процессов. Если вам интересно дальнейшее изучение этой технологии, я рекомендую ознакомиться со статьями Константина Леонтьева, посвященными WMI, ссылки на которые вы можете найти в конце статьи.

WSH Remote Scripting

Да, как ни странно у Windows Script Host тоже есть возможность запуска сценариев на других компьютерах. Правда эта функция не получила большой популярности, и скорее всего из-за того, что требует слишком много подготовительных мероприятий, а взамен предоставляет совсем немного возможностей. Но я все равно расскажу об этом методе, так, как и он может пригодиться.

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

  1. Права администратора на удалённом компьютере. Это само собой разумеется, и требуется почти для всех остальных методов запуска, перечисленных в этой статье.
  2. Разрешить WSH Remote Scripting создав в системном реестре строковой параметр Remote равный “1” в ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings
  3. Из-за ошибки описанной в статье базы знаний Microsoft с номером 311269, на системах с Windows XP может понадобиться выполнить команду wscript –regserver
  4. Если на компьютерах используется брандмауэр, то в нём необходимо разрешить обращения к DCOM. Причем сделать это надо не только на управляемом компьютере, но и на том с которого вы хотите запускать сценарий.
  5. В системах Windows XP с пакетом обновлений 2 и выше, необходимо изменить параметры безопасности DCOM. Это можно сделать с помощью групповой политики. В узле Computer Configuration Windows Settings Security Settings Local Policies Security Options следует установить разрешения следующим образом:
    1. DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax
      Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access
    2. DCOM: Machine Launch Restrictions in Security Descriptor Definition Language (SDDL) syntax
      Выдать группе Administrators разрешения Allow Local Launch, Allow Remote Launch, Allow Local Activation, Allow Remote Activation
      Группе Everyone – Allow Local Launch, Allow Local Activation

    Ну и после всех этих процедур, можно попробовать запустить свой сценарий на другом компьютере.

    Пример сценария, который использует эту технологию:

    Листинг №2 – WSH remote scripting (VBScript)

    [code]Set objController = CreateObject(“WshController”)
    Set objRemoteScript = objController.CreateScript(“C:test.vbs”, “PC5”)WScript.ConnectObject objRemoteScript, “remote_”
    objRemoteScript.Execute
    Do While objRemoteScript.Status <> 1
    WScript.Sleep 1000
    Loop
    MsgBox “Script complete”
    Sub remote_Error
    Dim objError
    Set objError = objRemoteScript.Error
    WScript.Echo “Error – Line: ” & objError.Line & _
    “, Char: ” & objError.Character & vbCrLf & _
    “Description: ” & objError.Description[/code]

    На второй его строчке, в качестве параметров для функции CreateScript указывается путь к файлу сценария, который будет выполнен на удаленном компьютере и собственно имя этого компьютера.

    Более подробную статью об этой технологии можно прочитать в статье Advanced VBScript for Microsoft Windows Administrators – Chapter 6: Remote Scripting (см. Ссылки).

    Планировщик заданий (Task Scheduler)

    Планировщиком заданий можно управлять из командной строки используя две утилиты – at.exe и schtasks.exe. Обе эти утилиты позволяют указать имя удалённого компьютера для создания задания, и, следовательно, позволяют решить нашу задачу. Но подробно мы рассмотрим лишь schtasks.exe, так как она предоставляет гораздо больше возможностей.

    Хотя выполнение команд на других компьютерах не является основным предназначением планировщика, тем не менее он позволяет реализовать немало интересных сценариев. Например, с его помощью можно включить установку программного обеспечения в период обеденного перерыва. Или если ваши пользователи обедают в разное время, запуск можно выполнять после определённого периода бездействия компьютера.

    [code]schtasks /create /s server6.td.local /tn install /tr \maindatainstall.cmd /sc once /st 13:00 /ru system[/code]

    Важно понимать от имени какой учетной записи будет выполняться задача. В этом примере я указал для параметра /ru значение system, следовательно, для выполнения установки учетной записи компьютера будет необходим доступ на чтение в сетевую папку с дистрибутивом программы.

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

    Листинг №3 – Установка программы с последующим удалением задания (Windows Batch)

    [code]msiexec /qn /package \serversharesubinacl.msi
    if exist “c:program filesWindows Resource KitsToolssubinacl.exe” (
    subinacl /tn Install_Subinacl /f
    )[/code]

    WinRM (WS-Management)

    WinRM – это реализация открытого стандарта DMTF (Distributed Management Task Force) от Microsoft, которая позволяет управлять системами с помощью веб-служб. Углубляться в устройство технологии я не буду, а лишь кратко опишу, что необходимо для её использования.

    Версия WinRM 1 и выше входит в состав операционных систем, начиная с Windows Vista и Windows Server 2008. Для Windows XP и Windows Server 2003 можно установить WinRM в виде отдельного пакета (см. ссылки).

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

    Чтобы winrm не спрашивал подтверждения, можно добавить к вызову ключ -quiet. Узнать информацию о более тонкой настройке можно посмотреть встроенную справку winrm:

    [code]winrm help config[/code]

    Если на управляемом компьютере работает веб-сервер, WinRM никак ему не помешает, хоть и использует по умолчанию стандартные порты HTTP. Он будет перехватывать лишь подключения, предназначенные специально для него.

    Разумеется, необязательно выполнять эту команду вручную, на каждом компьютере которым вы хотите управлять. Все необходимые настройки легко сделать с помощью групповых политик. Для этого нужно:

    1. Настроить службу WinRM (Windows Remote Management) на автоматический запуск
    2. Настроить элемент групповой политики Computer Configuration Administrative Templates Windows Components Windows Remote Management (WinRM) WinRM Service Allow automatic configuration of listeners. Тут нужно указать диапазоны IP-адресов с которых разрешаются подключения.
    3. Разумеется, еще вам будет необходимо разрешить подключения на соответствующие порты (по умолчанию 80) в брандмауэре Windows.

    Независимо от того используется ли порт HTTP (80) или HTTPS (443) трафик, передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

    Но хватит о настройках, лучше перейдем непосредственно к использованию. Хоть утилита winrm позволяет настраивать службу WinRM, а также выполнять, например, WMI запросы, нам более интересна другая – winrs. Буквы RS тут означают Remote Shell. WinRS работает очень похоже на PsExec хотя и использует технологию WinRM. Имя компьютера задаётся ключом -r, а после него следует команда, которую нужно выполнить. Вот несколько примеров:

    [code]winrs -r:Core ver.exe[/code]

    Так как winrs и так использует cmd.exe в качестве удалённой оболчки, в командах можно легко обращаться к удалённым переменным окружения, или использовать другие встроенные команды cmd.exe:

    [code]winrs -r:Core “dir c:temp > c:templist.txt”[/code]

    Как и PsExec, утилита winrs позволяет открыть интерактивный сеанс на удалённом компьютере:

    [code]winrs -r:main cmd.exe[/code]

    Эта функция аналогична telnet сессии, но использование winrs однозначно лучше telnet и даже PsExec, с точки зрения безопасности. Независимо от того используется ли порт HTTP (80) или HTTPS (443), трафик, передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

    Windows PowerShell 2.0 Remoting

    Хотя вторая версия Windows PowerShell на момент написания статьи находится еще в состоянии бета тестирования, о её возможностях в области удалённого выполнения команд определённо стоит рассказать уже сейчас. Попробовать его своими руками вы можете либо, загрузив предварительную версию (см. ссылки) либо в составе бета-версии Windows 7 или Windows Server 2008 R2.

    Инфраструктура PowerShell Remoting основана на WinRM версии 2.0, и поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell, и его способностям работы с объектами, мы получаем еще большие возможности. На данный момент пакет WinRM2.0 тоже находится в состоянии бета-тестирования, и доступен для загрузки только для систем Windows Vista и Windows 2008. В системы Windows 7 и Windows Server 2008R2 он будет встроен изначально, как и PowerShell 2.0.

    Обновление: К моменту публикации статьи на ItBand.ru, финальные версии PowerShell 2.0 и WinRM 2.0 доступны уже для всех поддерживаемых платформ. В состав Windows Server 2008R2 и Windows 7 они уже включены как неотъемлемые компоненты системы, а для Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 все необходимые компоненты можно получить в виде пакета называемого Windows Management Framework.

    Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.

    После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):

    [code]Invoke-Command -ComputerName Main -ScriptBlock [/code]

    Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.

    [code]$Command =
    Invoke-Command -ComputerName Main, Server7, Replica -ScriptBlock $Command[/code]

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

    Впрочем, возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.

    Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка [code]c:computers.txt.[/code]

    Проксирование

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

    Чаще всего такие проблемы люди решают с помощью утилит вроде cpau.exe (см. ссылки) которые создают файл с зашифрованным паролем административной учетной записи, позволяющий запускать определённую программу. Проблема, однако, в том, что хоть пароль и зашифрован, перед запуском программы утилите придётся его расшифровать. А соответственно пользователь может использовать утилиту повторяющую алгоритм расшифровки пароля, и узнать его, чтобы затем использовать для запуска других программ или получения дополнительных привилегий. Практически это конечно достаточно сложно для обычных пользователей, не обладающих специальными знаниями, но, тем не менее, вполне возможно. Еще раз уточню, это не беда конкретной утилиты, а проблема такого подхода вообще.

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

    Чтобы избежать этих проблем, но, тем не менее, разрешить выполнение конкретной команды, можно использовать методику, которая называется “проксированием”.

    Работает она следующим образом. На компьютере постоянно работает сценарий с высокими привилегиями. Например, в нашем случае он будет запущен из-под учетной записи, обладающей правами администратора на файловом сервере. По сигналу пользователя он будет выполнять одну, заранее определённую команду. В этом примере – закрывать все файлы, открытые по сети.

    Для организации этой системы мы поместим на сервере, например, в папке c:scripts командные файлы Server.cmd и Action.cmd.

    Листинг №4 – Server.cmd (Windows Batch)

    [code]set trigger=c:commandSharetrigger.txt
    set action=c:scriptsaction.cmd
    set log=c:scriptslog.txt
    :start
    if exist %trigger% start %action% & echo %time% %date%>>%log% & del %trigger%
    sleep.exe 5
    goto start[/code]

    Листинг №5 – Action.cmd (Windows Batch)

    [code]for /f “skip=4 tokens=1” %%a in (‘net files’) do net files %%a /close
    exit[/code]

    Server.cmd будет ждать знака от пользователя (создание файла в определенном месте), и получив его, запускать файл с командами – Action.cmd. Разумеется, в эту папку пользователи не должны иметь никакого доступа. Автоматический запуск Server.cmd при запуске компьютера можно организовать, просто создав соответствующую задачу в планировщике:

    [code]schtasks /create /ru domainadministrator /rp /sc onstart /tn ProxyScript /tr c:scriptsserver.cmd[/code]

    После параметра /ru указывается учетная запись, под которой будет выполняться сценарий (в нашем случае она обладает правами администратора на сервере), так как после параметра /rp пароль не указан – он будет запрошен при создании задачи. Параметр /sc позволяет указать момент запуска сценария, в нашем случае – при включении компьютера. Ну а /tn и /tr позволяют указать имя задачи, и исполняемый файл.

    Теперь, для того чтобы пользователь мог подать сценарию сигнал, мы создадим папку c:commandShare и сделаем её доступной по сети. Доступ на запись в эту папку должен быть только у тех пользователей, которые будут запускать команду.

    После этого достаточно будет поместить пользователю на рабочий стол файл Run.cmd.

    Листинг №6 – Run.cmd (Windows Batch)

    [code]echo test > \servercommandSharetrigger.txt[/code]

    При его выполнении, от имени пользователя, будет создаваться файл \servercommandSharetrigger.txt. Сценарий Server.cmd, заметив его, запустит на выполнение со своими привилегиями файл Action.cmd, добавит запись в файл c:scriptslog.txt о текущем времени, а затем удалит trigger.txt чтобы не выполнять команду снова до следующего сигнала пользователя.

    В сценарии Server.cmd используется утилита Sleep.exe, позволяющая сделать паузу в выполнении сценария на заданный в секундах промежуток времени. Она не входит в состав операционной системы, но её можно взять из набора Resource Kit Tools (см. ссылки) и просто скопировать на любой компьютер.

    Ссылки

    Скачать PsTool в составе PsExec с этого сайта.

    Ранее статья была опубликована в журнале Windows IT Pro RE в №4 за 2009 год.

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

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

PsExec.exe

Один из моих любимых способов для решения этой задачи это утилита командной строки PsExec.exe написанная Марком Руссиновичем, которую вы можете свободно скачать с сайта Windows SysInternals. Ссылку на неё вы можете найти в конце статьи. Она не требует установки в систему, вы можете просто скопировать её в одну из папок, содержащихся в переменной окружения %path% и вызывать из любой оболочки командной строки: Cmd или PowerShell.

Использовать PsExec очень просто. Например, чтобы выполнить ipconfig /flushdns на компьютере main, достаточно запустить следующую команду:

[code]psexec \main ipconfig /flushdns[/code]

Команда ipconfig будет запущена на компьютере main под вашими учетными данными. После завершения работы ipconfig весь текстовый вывод будет передан на ваш компьютер, а кроме того будет возвращён код выхода команды (error code). В случае если команда выполнилась успешно, он будет равен 0.

7 способов выполнить команду на удалённом компьютере

Разумеется, на этом возможности PsExec не заканчиваются. Вызвав утилиту без параметров, можно посмотреть другие доступные опции. Я обращу внимание лишь на некоторые из них.

Ключ -d говорит PsExec что ненужно дожидаться выполнения команды, а достаточно лишь запустить её, и забыть. В этом случае мы не получим выходных данных от консольной утилиты, но зато сможем не дожидаясь завершения предыдущей команды запускать другие. Это очень полезно, если вам необходимо запустить, например установщик программы на нескольких компьютерах.

По умолчанию PsExec выполняет команды в скрытом режиме, то есть на системе где выполняется команда, не будут выводиться никакие окна или диалоги. Однако есть возможность изменить это поведение, с помощью ключа -i . После него можно указать номер сессии, в которой выводить окна, а можно и не указывать, тогда интерфейс будет отображен в консольной сессии.

Таким образом, чтобы вывести окно с информацией о версии операционной системы на компьютере main, следует запустить PsExec таким образом:

[code]psexec -i \main winver.exe[/code]

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

[code]psexec @c:comps.txt systeminfo.exe[/code]

Ну и одной из самых полезных способностей PsExec является возможность интерактивного перенаправления ввода/вывода между компьютерами, что позволяет нам запустить, например, cmd.exe на удалённом сервере, а давать ему команды и получать результаты на локальном компьютере.

7 способов выполнить команду на удалённом компьютере

Каким образом работает PsExec? 

Всё гениальное просто. В ресурсах исполняемого файла PsExec.exe находится другой исполняемый файл – PSEXESVC, который является службой Windows. Перед выполнением команды, PsExec распаковывает этот ресурс на скрытую административную общую папку удалённого компьютера, в файл: \ИмяКомпьютераAdmin$system32psexesvc.exe. Если вы с помощью ключа -c указали что необходимо скопировать исполняемые файлы на эту систему, они тоже скопируются в эту папку.

По завершению подготовительных действий, PsExec устанавливает и запускает службу, используя API функции Windows для управления службами. После того как PSEXESVC запустится, между ним и PsExec создаётся несколько каналов для передачи данных (вводимых команд, результатов, и т.д.). Завершив работу, PsExec останавливает службу, и удаляет её с целевого компьютера.

Windows Management Instrumentation (WMI)

Следующий способ реализации этой популярной задачи, о котором я хочу поведать – использование Windows Management Instrumentation. WMI присутствует во всех операционных системах Microsoft, начиная с Windows 2000, и даже на Windows 9x его можно установить из отдельного пакета. WMI включён по умолчанию, и не требует дополнительной настройки. Для его использования достаточно административных прав, и разрешенного на брандмауэре протокола DCOM. WMI предоставляет огромные возможности для управления системами, но нас сейчас интересует лишь одна из них.

Для запуска процессов нам потребуется метод Create класса Win32_Process. Использовать его достаточно несложно. В PowerShell это делается следующим образом:

[code]$Computer = “main”
$Command = “cmd.exe /c systeminfo.exe > \servershare%computername%.txt”
([wmiclass]”\$Computerrootcimv2:Win32_Process”).create($Command)[/code]

Здесь в качестве запускаемого процесса я указал cmd.exe, а уже ему, в качестве аргументов передал нужную команду. Это необходимо в случае если вам нужно использовать переменные окружения удалённого компьютера или встроенные операторы cmd.exe, такие как «>» для перенаправления вывода в файл. Метод Create не дожидается завершения процесса, и не возвращает результатов, но зато сообщает нам его идентификатор – ProcessID.

Если вы используете компьютер, на котором пока не установлен PowerShell, вы можете вызвать этот метод WMI и из сценария на VBScript. Например, вот так:

Листинг №1 – Запуск процесса используя WMI (VBScript) 

[code]Computer = “PC3”
Command = “cmd.exe /c systeminfo.exe > \servershare%computername%.txt”
Set objWMIService = GetObject(“winmgmts:\” & Computer & “rootcimv2:Win32_Process”)
Result = objWMIService.Create(“calc.exe”, Null, Null, intProcessID)[/code]

Но гораздо проще воспользоваться утилитой командной строки wmic.exe которая предоставляет достаточно удобный интерфейс для работы с WMI и входит в состав операционных систем, начиная с Windows XP. В ней чтобы запустить, например калькулятор на компьютере main достаточно выполнить следующую команду:

[code]wmic /node:main process call create calc.exe[/code]

Разумеется, возможности WMI не ограничиваются только запуском процессов. Если вам интересно дальнейшее изучение этой технологии, я рекомендую ознакомиться со статьями Константина Леонтьева, посвященными WMI, ссылки на которые вы можете найти в конце статьи.

WSH Remote Scripting

Да, как ни странно у Windows Script Host тоже есть возможность запуска сценариев на других компьютерах. Правда эта функция не получила большой популярности, и скорее всего из-за того, что требует слишком много подготовительных мероприятий, а взамен предоставляет совсем немного возможностей. Но я все равно расскажу об этом методе, так, как и он может пригодиться.

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

  1. Права администратора на удалённом компьютере. Это само собой разумеется, и требуется почти для всех остальных методов запуска, перечисленных в этой статье.
  2. Разрешить WSH Remote Scripting создав в системном реестре строковой параметр Remote равный “1” в ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings
  3. Из-за ошибки описанной в статье базы знаний Microsoft с номером 311269, на системах с Windows XP может понадобиться выполнить команду wscript –regserver
  4. Если на компьютерах используется брандмауэр, то в нём необходимо разрешить обращения к DCOM. Причем сделать это надо не только на управляемом компьютере, но и на том с которого вы хотите запускать сценарий.
  5. В системах Windows XP с пакетом обновлений 2 и выше, необходимо изменить параметры безопасности DCOM. Это можно сделать с помощью групповой политики. В узле Computer Configuration Windows Settings Security Settings Local Policies Security Options следует установить разрешения следующим образом:
    1. DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax
      Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access
    2. DCOM: Machine Launch Restrictions in Security Descriptor Definition Language (SDDL) syntax
      Выдать группе Administrators разрешения Allow Local Launch, Allow Remote Launch, Allow Local Activation, Allow Remote Activation
      Группе Everyone – Allow Local Launch, Allow Local Activation

Ну и после всех этих процедур, можно попробовать запустить свой сценарий на другом компьютере.

Пример сценария, который использует эту технологию:

Листинг №2 – WSH remote scripting (VBScript) 

[code]Set objController = CreateObject(“WshController”)
Set objRemoteScript = objController.CreateScript(“C:test.vbs”, “PC5”)WScript.ConnectObject objRemoteScript, “remote_”
objRemoteScript.Execute
Do While objRemoteScript.Status <> 1
WScript.Sleep 1000
Loop
MsgBox “Script complete”
Sub remote_Error
Dim objError
Set objError = objRemoteScript.Error
WScript.Echo “Error – Line: ” & objError.Line & _
“, Char: ” & objError.Character & vbCrLf & _
“Description: ” & objError.Description[/code]

На второй его строчке, в качестве параметров для функции CreateScript указывается путь к файлу сценария, который будет выполнен на удаленном компьютере и собственно имя этого компьютера.

Более подробную статью об этой технологии можно прочитать в статье Advanced VBScript for Microsoft Windows Administrators – Chapter 6: Remote Scripting (см. Ссылки).

Планировщик заданий (Task Scheduler)

Планировщиком заданий можно управлять из командной строки используя две утилиты – at.exe и schtasks.exe. Обе эти утилиты позволяют указать имя удалённого компьютера для создания задания, и, следовательно, позволяют решить нашу задачу. Но подробно мы рассмотрим лишь schtasks.exe, так как она предоставляет гораздо больше возможностей.

Хотя выполнение команд на других компьютерах не является основным предназначением планировщика, тем не менее он позволяет реализовать немало интересных сценариев. Например, с его помощью можно включить установку программного обеспечения в период обеденного перерыва. Или если ваши пользователи обедают в разное время, запуск можно выполнять после определённого периода бездействия компьютера.

[code]schtasks /create /s server6.td.local /tn install /tr \maindatainstall.cmd /sc once /st 13:00 /ru system[/code]

Важно понимать от имени какой учетной записи будет выполняться задача. В этом примере я указал для параметра /ru значение system, следовательно, для выполнения установки учетной записи компьютера будет необходим доступ на чтение в сетевую папку с дистрибутивом программы.

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

Листинг №3 – Установка программы с последующим удалением задания (Windows Batch) 

[code]msiexec /qn /package \serversharesubinacl.msi
if exist “c:program filesWindows Resource KitsToolssubinacl.exe” (
subinacl /tn Install_Subinacl /f
)[/code]

WinRM (WS-Management)

WinRM – это реализация открытого стандарта DMTF (Distributed Management Task Force) от Microsoft, которая позволяет управлять системами с помощью веб-служб. Углубляться в устройство технологии я не буду, а лишь кратко опишу, что необходимо для её использования.

Версия WinRM 1 и выше входит в состав операционных систем, начиная с Windows Vista и Windows Server 2008. Для Windows XP и Windows Server 2003 можно установить WinRM в виде отдельного пакета (см. ссылки).

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

[code]winrm quickconfig[/code]

Чтобы winrm не спрашивал подтверждения, можно добавить к вызову ключ -quiet. Узнать информацию о более тонкой настройке можно посмотреть встроенную справку winrm:

[code]winrm help config[/code]

Если на управляемом компьютере работает веб-сервер, WinRM никак ему не помешает, хоть и использует по умолчанию стандартные порты HTTP. Он будет перехватывать лишь подключения, предназначенные специально для него.

Разумеется, необязательно выполнять эту команду вручную, на каждом компьютере которым вы хотите управлять. Все необходимые настройки легко сделать с помощью групповых политик. Для этого нужно:

  1. Настроить службу WinRM (Windows Remote Management) на автоматический запуск
  2. Настроить элемент групповой политики Computer Configuration Administrative Templates Windows Components Windows Remote Management (WinRM) WinRM Service Allow automatic configuration of listeners. Тут нужно указать диапазоны IP-адресов с которых разрешаются подключения.
  3. Разумеется, еще вам будет необходимо разрешить подключения на соответствующие порты (по умолчанию 80) в брандмауэре Windows.

Независимо от того используется ли порт HTTP (80) или HTTPS (443) трафик, передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

Но хватит о настройках, лучше перейдем непосредственно к использованию. Хоть утилита winrm позволяет настраивать службу WinRM, а также выполнять, например, WMI запросы, нам более интересна другая – winrs. Буквы RS тут означают Remote Shell. WinRS работает очень похоже на PsExec хотя и использует технологию WinRM. Имя компьютера задаётся ключом -r, а после него следует команда, которую нужно выполнить. Вот несколько примеров:

[code]winrs -r:Core ver.exe[/code]

Так как winrs и так использует cmd.exe в качестве удалённой оболчки, в командах можно легко обращаться к удалённым переменным окружения, или использовать другие встроенные команды cmd.exe:

[code]winrs -r:Core “dir c:temp > c:templist.txt”[/code]

Как и PsExec, утилита winrs позволяет открыть интерактивный сеанс на удалённом компьютере:

[code]winrs -r:main cmd.exe[/code]

Эта функция аналогична telnet сессии, но использование winrs однозначно лучше telnet и даже PsExec, с точки зрения безопасности. Независимо от того используется ли порт HTTP (80) или HTTPS (443), трафик, передаваемый WinRM шифруется (если конечно вы не отключите эту опцию). Для аутентификации по умолчанию используется протокол Kerberos.

Windows PowerShell 2.0 Remoting

Хотя вторая версия Windows PowerShell на момент написания статьи находится еще в состоянии бета тестирования, о её возможностях в области удалённого выполнения команд определённо стоит рассказать уже сейчас. Попробовать его своими руками вы можете либо, загрузив предварительную версию (см. ссылки) либо в составе бета-версии Windows 7 или Windows Server 2008 R2.

Инфраструктура PowerShell Remoting основана на WinRM версии 2.0, и поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell, и его способностям работы с объектами, мы получаем еще большие возможности. На данный момент пакет WinRM2.0 тоже находится в состоянии бета-тестирования, и доступен для загрузки только для систем Windows Vista и Windows 2008. В системы Windows 7 и Windows Server 2008R2 он будет встроен изначально, как и PowerShell 2.0.

Обновление: К моменту публикации статьи на ItBand.ru, финальные версии PowerShell 2.0 и WinRM 2.0 доступны уже для всех поддерживаемых платформ. В состав Windows Server 2008R2 и Windows 7 они уже включены как неотъемлемые компоненты системы, а для Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 все необходимые компоненты можно получить в виде пакета называемого Windows Management Framework.

Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.

После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):

[code]Invoke-Command -ComputerName Main -ScriptBlock {netsh interface dump > c:ipconfig.txt}[/code]

Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.

[code]$Command = {(get-item c:Windowsexplorer.exe).VersionInfo.FileVersion}
Invoke-Command -ComputerName Main, Server7, Replica -ScriptBlock $Command[/code]

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

Впрочем, возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.

Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка [code]c:computers.txt.[/code]

Проксирование

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

Чаще всего такие проблемы люди решают с помощью утилит вроде cpau.exe (см. ссылки) которые создают файл с зашифрованным паролем административной учетной записи, позволяющий запускать определённую программу. Проблема, однако, в том, что хоть пароль и зашифрован, перед запуском программы утилите придётся его расшифровать. А соответственно пользователь может использовать утилиту повторяющую алгоритм расшифровки пароля, и узнать его, чтобы затем использовать для запуска других программ или получения дополнительных привилегий. Практически это конечно достаточно сложно для обычных пользователей, не обладающих специальными знаниями, но, тем не менее, вполне возможно. Еще раз уточню, это не беда конкретной утилиты, а проблема такого подхода вообще.

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

Чтобы избежать этих проблем, но, тем не менее, разрешить выполнение конкретной команды, можно использовать методику, которая называется “проксированием”.

Работает она следующим образом. На компьютере постоянно работает сценарий с высокими привилегиями. Например, в нашем случае он будет запущен из-под учетной записи, обладающей правами администратора на файловом сервере. По сигналу пользователя он будет выполнять одну, заранее определённую команду. В этом примере – закрывать все файлы, открытые по сети.

Для организации этой системы мы поместим на сервере, например, в папке c:scripts командные файлы Server.cmd и Action.cmd.

Листинг №4 – Server.cmd (Windows Batch) 

[code]set trigger=c:commandSharetrigger.txt
set action=c:scriptsaction.cmd
set log=c:scriptslog.txt
:start
if exist %trigger% start %action% & echo %time% %date%>>%log% & del %trigger%
sleep.exe 5
goto start[/code]

Листинг №5 – Action.cmd (Windows Batch) 

[code]for /f “skip=4 tokens=1” %%a in (‘net files’) do net files %%a /close
exit[/code]

Server.cmd будет ждать знака от пользователя (создание файла в определенном месте), и получив его, запускать файл с командами – Action.cmd. Разумеется, в эту папку пользователи не должны иметь никакого доступа. Автоматический запуск Server.cmd при запуске компьютера можно организовать, просто создав соответствующую задачу в планировщике:

[code]schtasks /create /ru domainadministrator /rp /sc onstart /tn ProxyScript /tr c:scriptsserver.cmd[/code]

После параметра /ru указывается учетная запись, под которой будет выполняться сценарий (в нашем случае она обладает правами администратора на сервере), так как после параметра /rp пароль не указан – он будет запрошен при создании задачи. Параметр /sc позволяет указать момент запуска сценария, в нашем случае – при включении компьютера. Ну а /tn и /tr позволяют указать имя задачи, и исполняемый файл.

Теперь, для того чтобы пользователь мог подать сценарию сигнал, мы создадим папку c:commandShare и сделаем её доступной по сети. Доступ на запись в эту папку должен быть только у тех пользователей, которые будут запускать команду.

После этого достаточно будет поместить пользователю на рабочий стол файл Run.cmd.

Листинг №6 – Run.cmd (Windows Batch) 

[code]echo test > \servercommandSharetrigger.txt[/code]

При его выполнении, от имени пользователя, будет создаваться файл \servercommandSharetrigger.txt. Сценарий Server.cmd, заметив его, запустит на выполнение со своими привилегиями файл Action.cmd, добавит запись в файл c:scriptslog.txt о текущем времени, а затем удалит trigger.txt чтобы не выполнять команду снова до следующего сигнала пользователя.

В сценарии Server.cmd используется утилита Sleep.exe, позволяющая сделать паузу в выполнении сценария на заданный в секундах промежуток времени. Она не входит в состав операционной системы, но её можно взять из набора Resource Kit Tools (см. ссылки) и просто скопировать на любой компьютер.

Ссылки

Скачать PsTool в составе PsExec с этого сайта.

PsExec.exe скачать с сайта Microsoft

Windows SysInternals

Ранее статья была опубликована в журнале Windows IT Pro RE в №4 за 2009 год. 

Василий Гусев 

http://xaegr.wordpress.com/

Что нужно для psexec

Для работы PsExec на удалённом компьютере не требуется никакого программного обеспечения — то есть на компьютере, которым вы будете управлять, не нужно устанавливать никакую клиентскую часть. Но нужно соблюдение некоторых условий, чтобы PsExec работала, поэтому если первая попытка не удалась, то проверьте следующие требования.

1. На обеих машинах, т.е. удалённом компьютере (которым будем управлять) и локальном компьютере (с которого будем управлять), должен быть включён общий доступ к файлам и принтерам. Для их включения смотрите статью «SMB: настройка общей сетевой папки в Windows».

Что такое psexec и pstools

На самом деле, PsExec это всего лишь один из инструментов из пакета PsTools. Программа PsExec используется чаще всего, поэтому обычно упоминается она, но в данной инструкции будут рассмотрены как примеры использования PsExec, так и примеры использования других инструментов из пакета PsTools.


Состав PsTools:

  • PsExec используется для удалённого выполнения команд или получения шелла (оболочки) на удалённой системе
  • PsFile используется для вывода списка удалённо открытых файлов
  • PsGetSid используется для отображения идентификатора безопасности для удалённого компьютера или пользователя
  • PsInfo используется для получения подробной информации об удалённой системе
  • PsKill используется для остановки процесса в удалённой системе по имени или идентификатору
  • PsList используется для детального отображения процессов в удалённой системе
  • PsLoggedOn используется для вывода списка зарегистрированных пользователей в удалённых системах
  • PsLogList, используемый для отображения журналов событий на удалённых системах
  • PsPasswd используется для изменения заданного пароля пользователя в удалённой системе
  • PsPing используется для пинга из удалённой системы
  • PsServervice используется для перечисления и управления службами Windows в удалённой системе
  • PsShutdown используется для выключения, выхода из системы, приостановки и перезапуска удалённой системы Windows
  • PsSuspend используется для приостановки и возобновления процессов в удалённой системе Windows
  • PsUptime используется для отображения времени работы удалённой системы

Pass the hash (использование хеша вместо пароля)

Указывать в командной строке пароль плохо для безопасности. А использование интерактивного ввода не позволяет использовать psexec.exe в скриптах. Выход из этой ситуации — использовать хеш пароля.

PsExec не может напрямую использовать хеш (хотя это ошибочно утверждается в некоторых инструкциях). Для применения хеша (Pass The Hash) с PsExec нужно использовать Windows Credential Editor или Mimikatz или Metasploit.

Пример выполнения Pass The Hash с PsExec. Вначале в Mimikatz:

Адаптация скриптов powershell для linux


Я сам только начинаю знакомство с PowerShell, но хочу привести интересный пример, как можно самостоятельно решить проблему и запустить скрипт PowerShell в Linux не смотря на то, что он выдавал ошибку.

В Invoke-TheHash есть функция Invoke-SMBEnum, которая выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов. В Windows эта функция работает отлично. Попробую использовать её в Linux.

Запускаю консоль PowerShell:

pwsh


Перехожу в папку с уже скаченными скриптами:

cd ./bin/Invoke-TheHash/

Импортирую файл с нужной функцией:

Import-Module .Invoke-SMBEnum.ps1

Запускаю:

Включение удалённого рабочего стола

Проверить есть ли доступ к удалённому рабочему столу можно с помощью команды telnet, попробовав подключиться к соответствующему порту. Для Windows штатным является подключение по протоколу RDP на порт 3389 (хотя, конечно, и порт для RDP можно изменить и использовать другие протоколы). В случае открытого порта (подключения разрешены) мы увидим приглашение командной оболочки telnet:

Если же подключение запрещено, то команда зависнет на этапе “Trying 192.168.2.68…”

Даже если удалённое подключение к рабочему столу отключено его можно удалённо же и включить, а затем подключиться как обычно. Для этого внесём изменение в реестр удалённого ПК.

Если мы получили доступ к командной строке удалённого ПК (см. PsExec выше), то выполняем:

reg add “HKLMSYSTEMCurrentControlSetControlTerminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f

Иначе, можно подключиться к реестру через оснастку.

1) Запускаем на удалённом ПК службу “Удаленный реестр”.

  • Входим в локальную оснастку “Службы”:

services.msc

  • Подключаемся к службам удалённого ПК: в боковом меню Службы в контекстном меню выбрать “Подключиться к другому компьютеру…”
  • Находим службу “Удаленный реестр” и меняем тип запуска на “Вручную”
  • Запускаем службу: кнопка “Запустить”

2) Подключаемся к реестру удалённого ПК.

  • На локальном ПК запускаем редактор реестра:

regedit

Пробуем подключиться:

mstsc

3) Если подлкючиться не удаётся, то нужно ещё донастроить брандмауэр на удалённом ПК

  • Получаем досутп к командной строке удалённого ПК с помощью PsExec:

psExec64.exe 192.168.2.68 cmd

  • Добавляем разрешающее правило в брандмауэр Windows на удалённое подключение к рабочему столу (порт 3389):

netsh advfirewall firewall add rule name=”Allow Remote Desktop” dir=in protocol=TCP localport=3389 action=allow

См. также

Задать вопрос по powershell

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

Связанные статьи:

Запуск командной строки на удалённом пк

Для подключения можно использовать IP адрес или имя компьютера:

psExec64.exe 192.168.2.68 cmd

или если хотим подключиться не от имени текущего пользователя, то:

PsExec.exe 192.168.2.68 -u ДоменПользователь -p Пароль cmd

Если ПК не в домене, то вместо “Домен” указываем имя ПК.

После удачного подключения изменится заголовок окна.

Запуск скрипта с помощью import-module

При запуске некоторых скриптов может ничего не происходить. Дело в том, что скрипт может содержать в себе функцию, которую нужно импортировать, а затем запустить. Поищите в документации по интересующей вас программе примеры со строкой Import-Module.

Например для запуска WinPwn нужно вначале импортировать файл с функциями:

Import-Module .WinPwn.ps1

А после этого можно вызывать содержащиеся в файле функции:

WinPwn

Инструменты pstools


До сих пор мы рассмотрели возможности утилиты PsExec, которая является самой популярной в пакете PsTools. Но в PsTools ещё много утилит для типичных действий, которые регулярно выполняют системные администраторы. Рассмотрим их далее.

Как в psexec запустить команду с аргументами

Аргументы программы достаточно указать через пробел после самой команды:

Как включить учётную запись администратора

В моих тестах на последних Windows 10 и Windows Server 2021 команда PsExec работает только с учётной записью Администратор. Поэтому в этом разделе описано, как активировать пользователя Администратор, который по умолчанию присутствует в Windows, но в обычных, не серверных версиях, этот пользователь отключён.


Пользователя Администратор должен быть активен только на удалённом компьютере, где будут выполняться команды с помощью PsExec. На локальном компьютере учётная запись Администратор не требуется.

1. Нажмите клавиши Win r, чтобы открыть окно запуска команды.

2. Введите lusrmgr.msc и нажмите Enter.

3. Откройте Пользователи.

4. Щёлкните правой кнопкой мыши Администратор и выберите Свойства.

5. Снимите флажок «Отключить учётную запись» и нажмите ОК.

6. Снова щёлкните правой кнопкой мыши учётную запись администратора и выберите «Задать пароль».

7. Укажите пароль для учётной записи администратора и нажмите «ОК».

Как вывести список открытых удалённо файлов с помощью psfile


Команду PsFile можно использовать для просмотра или закрытия открытых файлов. Синтаксис очень похож на команду PSexec. В этом примере мы перечислим все открытые удалённо файлы.

.psfile HACKWARE-SERVER -u Администратор -p Aa1

Как вывести список служб

Мы можем перечислить удалённые сервисы с опцией query.

.psservice HACKWARE-SERVER -u Администратор -p Aa1 query

Как выключить, перезагрузить, приостановить удалённую систему с psshutdown

Удалённую систему можно отключить командой PsShutdown, как показано ниже.

.psshutdown HACKWARE-SERVER -u Администратор -p Aa1 -k

Связанные статьи:

Как запустить команду как пользователь system

При выполнении команд в удалённой системе привилегии и владелец процесса будут предоставлены пользователем. Если нам нужно изменить владельца удалённых команд на пользователя SYSTEM, мы указываем опцию -s.


В этом примере мы будем использовать regedit.exe:

.psexec HACKWARE-SERVER -u Администратор -p Aa1 -i -s regedit.exe

Обратите внимание, что если на локальном компьютере нужно запустить программу с привилегиями SYSTEM (это намного более высокий привилегии, чем Администратор), то psexec также поможет. Например, чтобы получить доступ к разделам реестра Windows HKEY_LOCAL_MACHINESAMSAM достаточно выполнить команду:

psexec -s -i regedit.exe

Как запустить команду на удалённой системе

Основное использование команды PsExec — это просто запуск команды в удалённой системе. Чтобы запустить команду в удалённой системе, мы должны указать имя пользователя и пароль вместе с командой для запуска на удалённом компьютере.


Общий вид команды для запуска на удалённой системе:

.psexec КОМПЬЮТЕР -u Администратор -p ПАРОЛЬ КОМАНДА АРГУМЕНТЫ КОМАНДЫ

В этой команде:

Пример выполнения команды ipconfig на удалённом компьютере hackware-server от имени пользователя Администратор с паролем Aa1:

.psexec HACKWARE-SERVER -u Администратор -p Aa1 ipconfig

Как мы видим, команда выполняется в удалённой системе без проблем.


У удалённого компьютера HACKWARE-SERVER IP адресом является 192.168.0.53, поэтому следующая команда эквивалентна предыдущей:

.psexec 192.168.0.53 -u Администратор -p Aa1 ipconfig

Обратите внимание, что в Windows (в противоположность Linux), регистр букв в именах компьютеров, командах и путях не имеет значения — можно использовать буквы любого регистра в любых местах.

Как запустить приложение с графическим интерфейсом на удалённой системе

Операционные системы Windows предоставляют по умолчанию графический интерфейс. PsExec можно использовать для открытия приложения с графическим интерфейсом на удалённой системе в указанной пользовательской консоли. Пользовательская консоль просто означает рабочий стол пользователя.

В этом примере мы запустим notepad.exe на удаленной системе. Пользователь удаленного системного администратора может взаимодействовать с этим блокнотом. То есть программа откроется на удалённой системе, как-либо взаимодействовать с ней на локальной системе не получится.

.psexec HACKWARE-SERVER -u Администратор -p Aa1 -i notepad.exe

Поскольку используется опция -i, программа откроется в интерактивном режиме, что означает, что она фактически запустится на экране удалённого компьютера. Если бы -i была опущена в вышеупомянутой команде, то команда выполнялась бы в скрытом режиме, что означает не показывать какие-либо диалоговые окна или другие окна.

Мы получим нашу локальную оболочку после того, как удалённый пользователь закроет блокнот. После закрытия код выхода будет напечатан в консоли psexec.

Как запустить скрипт powershell в linux

В Linux для вызова консоли PowerShell нужно набрать:

pwsh

Затем в консоли PowerShell либо просто запустите желаемый скрипт:

./hello_world.ps1


Либо запустите функцию после импорта файла с помощью Import-Module. Пример запуска через импорт одной из функции Invoke-TheHash:

Как запустить скрипт powershell в windows

Для запуска скрипта с расширением .ps1 нужно открыть консоль PowerShell и затем указать полный путь до файла. Вы также можете перейти в папку со скриптом либо с помощью команды cd, либо, если вы хотите полностью окунуться в стиль PowerShell, то можете использовать Set-Location.

Как запустить службу удалённо

Удалённый сервис может быть запущен с опцией start. В этом примере мы запустим сервис с именем mysql.

.psservice HACKWARE-MIAL -u Администратор -p 1234 start mysql


После запуска сервиса будет выведена информация о нём.

Как изменить пароль на удалённой системе с помощью pspasswd

Пароли пользователей удалённой системы можно легко изменить с помощью команды PsPasswd. В этом примере мы изменим пароль администратора на 123456Aa.

.pspasswd HACKWARE-SERVER -u Администратор -p Aa1 Администратор 123456Aa

Как копировать исполнимый файл с локального на удалённую систему

Выполнение команд в удалённой системе — очень полезная функция, но есть и другая полезная функция, которая облегчит работу системных администраторов и пентестеров. PsExec может использоваться для копирования исполнимых файлов из локальной системы в удалённую систему. Мы задействуем опцию -c для операции копирования. По завершении команд скопированный экземпляр будет удалён.

В этом примере мы скопируем cmd.exe. После завершения операции копирования в удалённой системе будет запущен cmd.exe.

.psexec HACKWARE-SERVER -u Администратор -p Aa1 -c cmd.exe


Как мы видим, мы получаем оболочку cmd в удалённой системе.

С опцией -c можно указать любой файл.

Ещё один пример:

psexec J3BCD011 -c "Z:filesccleaner.exe” cmd /S

В последнем примере как использовать PsExec мы используем опцию -c для копирования программы ccleaner.exe на удалённый компьютер J3BCD011, а затем запускаем выгруженный файл с параметром /S, который говорит CCleaner включить тихую установку (не требует ввода пользователя). Добавление такого аргумента требует cmd.

Как обновить powershell до последней версии

По умолчани в Windows 10 предустановлена версия PowerShell 5, но в настоящее время последней версией является PowerShell 7. Чтобы обновиться до последней версии смотрите статью «Как установить PowerShell 7 в Windows 10». Обратите внимание, что PowerShell 7 не заменит PowerShell 5. То есть в системе будут доступны обе версии PowerShell.

Как остановить службу удалённо

В следующем примере мы остановим службу mysql:

.psservice HACKWARE-MIAL -u Администратор -p 1234 stop mysql

Как получить информацию об удалённой системе с psinfo

PsInfo — это инструмент, используемый для получения об удалённой системе информации, такой как время работы, версия, вариант Windows и т. д.

.psinfo HACKWARE-SERVER -u Администратор -p Aa1


Следующая информация об удалённой системе предоставлена в PsInfo:

  • Uptime показывает, сколько дней и часов работает система
  • Kernel Version показывает ядро операционной системы
  • Product Type показывает версию операционной системы
  • Product Version версия продукта
  • Kernel Build Number номер сборки ядра
  • Registered Organization организация
  • Registered Owner владелец
  • IE Version показывает версию Internet Explorer
  • System Root показывает, где установлена операционная система
  • Processor показывает количество процессоров или потоков
  • Processor Speed скорость (частота) центрального процессора
  • Processor Type показывает подробную версию и имя процессора
  • Physical Memory количество физической памяти
  • Video Driver показывает имя загруженного драйвера

Как получить процессов в удалённой системе с pslist

Процессы, запущенные в удалённой системе, могут быть легко перечислены с помощью команды PsList.

.pslist HACKWARE-SERVER -u Администратор -p Aa1

Вывод предоставит следующую информацию о процессах удалённой системы.

  • Name — это имя исполняемого файла
  • Pid — это ID процесса, который идентифицирует процессы (то есть отделяет друг от друга, является уникальной характеристикой процессов)
  • Pri является приоритетом, который влияет на производительность процесса в периоды высокой нагрузки
  • Thd — это номер потока
  • Hnd — это счётчик открытых файловых обработчиков
  • CPU Time — это общее использование ресурсов центрального процессора
  • Elapsed Time — это время от начала процесса

Как получить список sid на удалённой системе с psgetsid


SID используется для более детальной идентификации пользователей Windows. Мы можем перечислить SID предоставленных пользователей с помощью команды PsGetSid, как показано ниже.

.psgetsid HACKWARE-SERVER -u Администратор -p Aa1

Как получить список журналов событий на удалённой системе с помощью psloglist

Журналы удалённой системы могут быть легко выгружены в локальную систему с помощью команды PsLogList. Если мы используем эту команду без каких-либо дополнительных параметров, она выведет все журналы событий из удалённой системы, которые заполнят окно консоли. Так что для примера мы с опцией -m ограничим вывод последними 5 минутами журналов событий.

.psloglist HACKWARE-SERVER -u Администратор -p Aa1 -m 5

Как получить справку по командам в powershell

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

Get-Help КОМАНДА

Для получения справки по Set-Location:

Get-Help Set-Location


Для получения справки по Invoke-SMBEnum (после импорта функции из файла):

Get-Help Invoke-SMBEnum

Как создать интерактивную оболочку с подключением к удалённой системе

До сих пор мы выполняли команды удалённо. После выполнения команды подключение к удалённой системе закрывалось. Это как сессионное соединение. С помощью PsExec мы можем получить удалённую оболочку или командную строку (по аналогии SSH в Linux).

Но начнём с того, что посмотрим информацию о текущей системе и пользователе:

Как убить процесс в удалённой системе с pskill

Процессы, запущенные в удалённой системе, могут быть легко остановлены с помощью команды PsKill. Чтобы убить процесс, мы должны указать идентификатор процесса или имя процесса в качестве аргумента. Мы убьём удалённый процесс с идентификатором процесса 2064.

.pskill HACKWARE-SERVER -u Администратор -p Aa1 2064

Как установить powershell в linux

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

  • в скрипте используются команды, которые отсутствуют в Linux версии PowerShell (например, из-за того, что связаны с настройками Windows или неприменимы для Linux по другим причинам)
  • скрипт обращается к переменным окружения Windows
  • в скрипте используются утилиты Windows, отсутствующие в Linux

Могут быть и другие причины проблем, но много всё равно работает.


Многие дистрибутивы Linux поддерживаются официально и простые инструкции по установке PowerShell в свой дистрибутив, а также установочные файлы вы найдёте здесь:

Отключение брандмауэра

Отключаем брандмауэр для всех профилей сети:

netsh advfirewall set allprofiles state off

Включение:

netsh advfirewall set allprofiles state on

Отличия powershell и cmd в windows


В Windows PowerShell уже давно устанавливается по умолчанию.

Чтобы открыть PowerShell, нажмите Win x и выберите Windows PowerShell (администратор):

В приглашении командной строки вы увидите PS и текущую рабочую директорию:

Чтобы открыть CMD нужно нажать Win r, напечатать cmd и нажать ENTER:


Приглашение командной строки CMD выглядит так:

В CMD можно запустить:

  • утилиты командной строки Windows
  • встроенные функции CMD
  • файлы .bat

В PowerShell можно запустить всё то же самое, что и в CMD, а также дополнительно:

  • команды языка PowerShell
  • скрипты PowerShell


В PowerShell сработает такая простая команда как dir:

dir

Но если выполнить эту команду в PowerShell и в CMD, то можно увидеть, что вывод этих команд различается.

А если попытаться выполнить эту команду с опцией, например:

dir /A

То в CMD она сработает, а в PowerShell завершится ошибкой.

Дело в том, что вместо реализации таких же утилит как в CMD, в PowerShell используются собственные командлеты, работа которых различается, например, выводом или поддержкой опций. В PowerShell сработают команды cd, ls, dir, cat, man, kill, mount, move, sort, pwd, wget, curl и другие, знакомые по Linux, но это НЕ ОЗНАЧАЕТ что эти команды поддерживают те же самые опции, что и опции в Linux.

Get-Alias

Переименование удалённого пк

Текущее имя ПК можно увидеть через запрос к значению в реестре:

reg query “HKLMSYSTEMCurrentControlSetControlComputerNameComputerName” /v ComputerName

Изменяем в реестре имя ПК на New-PC-Name:

Для вступления в силу нового имени нужно перезагрузить компьютер:

shutdown /r /f /t 180

Здесь мы дали пользователю 3 минуты (180 секунд) на закрытие документов, но можно этот параметр изменить в соответствии со случаем.

Пинг с psping


Ещё одним полезным инструментом является PsPing, который создает ICMP-пакеты для проверки связи. Команда в примере запускается на локальной системе (но может быть запущена и удалённо).

Приветствую. Иногда возникают задачи когда нужно что-либо сделать на удаленном компьютере, при этом либо нет возможности подключиться по RDP, например, если вдруг сервер сильно загружен, и ему не хватит ресурсов для запуска терминальной сессии (да да, у меня такое встречалось, не сказать что часто, но бывало smiley). Либо из командной строки задачу сделать быстрее. Ну или еще как вариант, если нужно что то сделать скрытно, в том случае если пользователь в момент когда это нужно сделать работает за компьютером. Пользователям Linux с этим гораздо проще, у них есть ssh. Но и в Windows есть возможность подключаться, с позволения сказать, в командную строку.

В общем и целом на помощь к нам приходят утилиты SysInternals, а именно – pstools, а еще конкретнее – psexec из этого набора утилит. Скачать это добро можно <![CDATA[]]>здесь<![CDATA[]]>.

После того как скачали, нужно эти утилиты разархивировать куда-нибудь. Я обычно на диске C: создаю папку ps, что бы удобнее было добираться до утилит. Установки они не требуют. Для того что бы подключиться к удаленному компьютеру в командной строке набираем:

c:psPsExec.exe 192.168.1.114 -u domainuser -p password cmd

За место cmd можно например запустить какой-нибудь батник или другую команду.

Видео по теме:

Управление службами в удалённой системе с помощью psservice

Команда PsService используется для просмотра, запуска, остановки служб в удалённой системе.

Установка powershell в kali linux

PowerShell добавлен в стандартные репозитории Kali Linux, поэтому установка очень простая:

sudo apt install powershell

Как перенаправить вывод команды psexec

После запуска команды в удалённой системе вывод команды будет напечатан в текущий стандартный вывод, который является нашей текущей оболочкой (окном командной строки). Этот вывод может быть перенаправлен в файл с помощью символа >. Если у нас много удалённых систем для запуска команд, эта опция будет очень полезна.

.psexec HACKWARE-SERVER -u Администратор -p Aa1 ipconfig > HACKWARE-SERVER_ifconfig


В этом примере выходные данные команды ipconfig сохраняются в файл с именем HACKWARE-SERVER_ifconfig.

Для вывода содержимого файла можно использовать команду Get-Content или её более короткий псевдоним cat:

cat .HACKWARE-SERVER_ifconfig

Отправлено 26 июн. 2014 г., 03:52 пользователем Дмитрий Юшин

 

[

обновлено 29 июн. 2014 г., 21:00
]

Итак у нас есть компьютер из сети 192.168.0.0

ip — 192.168.0.100

маска — 255.255.255.0

шлюз — 192.168.0.1

dns — 8.8.8.8

пользователь — Администратор

пароль — pass123

Будем подключаться к нему. Запускаем консоль — cmd

команда пояснение
psexec \192.168.0.100 -u Aдминистратор -p pass123 cmd Заходим в консоль компьютера 192.168.0.100
(пароль можно не писать -p pass123, тогда утилита запросит его)
psexec \192.168.0.100 -u Aдминистратор -p pass123 -c d:1.bat Копируем программу 1.bat с диска d и запускаем её на удалённом компьютере.
psexec /? Полная справка по параметрам psexec

Примечание: если мы зашли в консоль на удалённой машине, то не получиться использовать кириллицу при наборе команд, для этого лучше написать bat файл и запустить его на другой машине. Это делается либо передачей этого файла через параметр -c, либо, копированием bat файла на удалённую машину в доступную папку, тогда можно будет его запустить из удалённой консоли.

Пример: Заходим на удалённый компьютер и разрешаем службу wmic.

psexec \192.168.0.100 -u Aдминистратор -p pass123 cmd

netsh firewall set service RemoteAdmin enable

exit

WMIC

Вообще команда wmic работает и на локальном компьютере. Для удалённого компьютера будем использовать параметр NODE.

команда пояснение
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ computersystem where name=»Имя компьютера» call rename name=»Новое имя»  Меняем имя компьютера
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ process get name  выдаёт имена процессов
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ process get ExecutablePath  имя и полный путь к файлу процесса
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ process where name=»123.exe» delete  удаляет процесс 123.exe
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ product get name  список установленных приложений(к сожалению не всех)
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″ product where name=»UltraVNC» call uninstall  деинсталляция приложения с именем UltraVNC
wmic /node:192.168.0.100 /User:»Администратор» /PASSWORD:»pass123″product call install true, «%параметры инсталлятора%», «%Путь_к_папке_с_дистрибутивом%Product.msi»  установка программы
 wmic /node:192.168.0.100 process call create 123.exe  запуск программы

Ещё несколько полезных команд

команда пояснение
 arp -a  таблица ip и mac адресов
 ipconfig  текушая настройка tcp/ip
 route print  просмотр таблицы маршрутизации
 hostname  показывает имя компьютера
 tasklist/taskkill  показать процессы/убить процессы
 net localgroup  показывает группы пользователей
 net user  показывает пользователей
 net user администратор  показывает информацию по пользователю
 net user администратор 123456  задать пароль администратору 123456
 net localgroup Пользователи «admin» /delete  удалить пользователя admin из группы Пользователи
 net accounts /maxpwage:unlimited  убрать ограничение на время действия пароля
 netsh interface show interface  показать имена сетевых подключений
 netsh interface set interface name=»%name%» newname=»NewName»  поменять имя сетевого интерфейса
 netsh interface ip set address «Имя сетевого интерфейса» static «IP-адрес» «Маска подсети» «Основной шлюз»  устанавливаем настройки сетевого интерфейса
 netsh interface ip set dns name=»Имя сетевого интерфейса» source=static addr=»Предпочитаемый DNS-сервер» register=primary  прописываем dns сервер

Пример:

Зайти на удалённый компьютер 192.168.0.100 поменять имя сетевого интерфейса с «подключение по локальной сети» на «lan»

сбросить таблицу маршрутизации.

Если мы зайдём через psexec и начнём изменять настройки сети, то сессия разорвётся компьютер вылетит из сети и нам к нему придётся идти ножками. Тем более в psexec не получится писать кирилицей.

поэтому создаём bat файл (например в блокноте)со следующим содержимым:

rem меняем имя интерфейса

netsh interface set interface name=»подключение по локальной сети» newname=»lan»

rem сбрасываем таблицу маршрутизации, сеть при этом отвалится. иногда помогает в борьбе с вирусами.

route /f

rem запускаем заново сеть, для этого укажем параметры адаптеру, кстати, у нас новое имя сетевого интерфейса — lan

netsh interface ip set address «lan» static «192.168.0.100» «255.255.255.0» «192.168.0.1»


записываем файл, например, на диск d с именем 1.bat

запускаем

psexec \192.168.0.100 -u Aдминистратор -p pass123 -c d:1.bat

В следующий раз посмотрим как на удалённом компьютере найти все фильмы и составить список из их названий.

PsExec — утилита для удаленного выполнения команд

Выполнение команд на удаленном компьютере — задача довольно распространенная. Это может быть необходимо для изменения настроек системы, установки или удаления программ и много еще для чего. Для решения подобных задач есть довольно много различных инструментов, начиная с серьезных программных комплексов типа System Center Configuration Manager и заканчивая скромными утилитами командной строки. Об одной из таких утилит и пойдет речь в этой статье.

Утилита PsExec входит в состав пакета PsTools компании Sysinternals. Она позволяет выполнять команды на удаленных компьютерах и при этом не требует установки в систему. Для использования утилиты достаточно просто скопировать ее в папку с исполняемыми файлами (напр. C:Windowssystem32) и запустить из любой оболочки командной строки: Cmd или PowerShell.
Принцип работы программы состоит в следующем: в ресурсах исполняемого файла PsExec.exe находится еще один исполняемый файл – PSEXESVC, который является службой Windows. Перед выполнением команды PsExec распаковывает этот ресурс в скрытую административную папку удалённого компьютера Admin$ (C:Windows), в файл C:Windowssystem32psexesvc.exe.

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

После завершения копирования PsExec устанавливает и запускает службу, используя API функции Windows для управления службами. Затем, после запуска PSEXESVC между ним и PsExec устанавливается соединение для передачи данных (ввода команд и получения результатов). По завершению работы PsExec останавливает службу и удаляет её с целевого компьютера.

Синтаксис PsExec выглядит следующим образом:

psexec \компьютер [-u пользователь [-p пароль]] программа [аргументы]

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

В качестве примера очистим кэш dns на удаленном компьютере SRV1:

psexec \SRV1 ipconfig /flushdns

Команда будет запущена на компьютере SRV1 под вашими учетными данными. После завершения работы ipconfig весь текстовый вывод будет передан на ваш компьютер, а кроме того будет возвращён код выполнения команды (error code). В случае если команда выполнилась успешно, он будет равен 0.

Если нужно выполнить несколько команд, то лучше установить с удаленным компьютером интерактивный сеанс. Для этого вводим команду psexec \SRV1 cmd
. Теперь команды, вводимые на локальном компьютере будут выполняться на удаленном компьютере SRV1.

PsExec позволяет выполнить команду одновременно на нескольких компьютерах. Для этого можно ввести имена компьютеров через запятую: psexec \SRV1, SRV2
или сохранить их в текстовом файле и затем указать его адрес: psexec @c:comp.txt
. Если же вместо имени компьютера поставить звездочку, вот так: psexec \*
, то команда будет выполнена на всех компьютерах домена.

И еще один интересный способ использования утилиты PsExec. Если не указывать имя компьютера, то по умолчанию команда выполняется в локальной системе. Используя ключ -s
можно запускать программы под учетной записью системы. Например, запустим сеанс командной строки: psexec -s cmd
и затем командой whoami
проверим, под каким пользователем мы сейчас работаем. Эта возможность может пригодиться для отладки программ или доступа к скрытым разделам реестра SAM и SECURITY.

Ну и несколько слов о ключах программы. Все описывать не буду, расскажу о наиболее интересных:

Указанная программа копируется в удаленную систему для выполнения. Например:

psexec \SRV1 -c test.exe

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

psexec \SRV1 «c:program filestest.exe»

Если вместе с ключом -c
использовать ключ -f
то даже если программа уже есть в удаленной системе, она будет перезаписана. А с ключом -v
она перезапишется только в том случае, если копируемая версия программы более новая чем та, что установлена в системе.

Работа программы в интерактивном режиме. По умолчанию PsExec выполняет команды в скрытом режиме, то есть на системе где выполняется команда, не выводятся никакие окна или диалоги. Однако есть возможность изменить это с помощью ключа -i
. После него можно указать номер сессии, в которой выводить окна, а можно и не указывать, тогда интерфейс будет отображен в консольной сессии.

Указывает, что не нужно ждать завершения приложения. В этом случае мы не получим выходных данных от консольной утилиты, но зато сможем не дожидаясь завершения предыдущей команды запускать следующие. Этот параметр следует использовать только при запуске неинтерактивных приложений.

Используется для запуска программы в режиме . Может потребоваться в операционных системах Windows Vista и выше для запуска некоторых программ, вносящих изменения в настройки системы (например regedit).

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

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

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

Я использую 2 средства удаленного выполнения консольных команд: PsExec и WinRM , у каждого из них есть свои преимущества.

PsExec

Одним из отличных решений поставленной в заголовке задачи является использование программы PsExec от великого Марка Руссиновича .

Программа работает по клиент-серверному принципу: на локальной машине выполняется клиент, который посылает команды серверу на удаленном компьютере. Особенностью этой программы является то, что серверная часть устанавливается автоматически непосредственно перед выполнением команды, а затем удаляется. Таким образом для выполнения команд на удаленных машинах достаточно иметь на них административные права.

Если PsExec запускается от имени администратора, который входит в тот же домен, что и удаленны компьютер, то никаких учетных данных даже вводить не нужно. В противном случае, их можно указать в командной строке, либо PsExec сама их запросит. PsExec работает на ОС начиная с Windows 2000 и заканчивая 64-битным Windows Server 2008 R2.

Очень полезными в PsExec являются следующие возможности:

  • Выполнение команды на группе компьютеров
    . Пример: следующая команда позволяет принудительно применить самые свежие групповые политики:
    psexec @group.txt gpupdate /force
  • Выполнение команд от имени системной учетной записи
    . Пример: следующая команда заставит удаленную систему принудительно проверить обновления:
    psexec \computer -s wuauclt /detectnow
  • Копирование выполняемой программы на удаленный компьютер перед выполнением
    . Пример: следующая команда позволит обновить членство данного компьютера в группе безопасности Active Directory (токен доступа) без перезагрузки:
    psexec \computer -c -s klist.exe purge

Трудно переоценить пользу этой программы, если использовать скрипты и возможности консольных команд, встроенных в Windows.

Windows Remote Management

Изначально это была серверная технология для удаленного управления оборудованием, которая появилась в Windows Server 2003 R2 как часть компонента Hardware Management, но недавно Microsoft выпустили пакет Windows Management Framework, который включает в себя PowerShell 2.0 и WinRM 2.0 и устанавливается на клиентские ОС как обновление. Подробности можно прочитать в статье KB968929 .

Прелесть WinRM заключается в простоте развертывания в доменной среде через WSUS в качестве факультативного обновления ОС и мощи, которую даёт совместное с PowerShell применение.

Использование WinRM происходит через 2 команды.

winrm.cmd
служит для конфигурирования настроек и диагностики клиента и сервера WinRM.

Для того, чтобы сервер WinRM начал принимать команды, должна быть запущена служба Windows Remote Management и произведена её начальная конфигурация. Используйте команду

winrm quickconfig на локальной машине, либо финт ушами
psexec -s \servername winrm quickconfig по сети, используя PsExec от имени системной учетной записи.

Будет предложено автоматически запускать службу WinRM и разрешить уделенные подключения, соглашайтесь;)

Чтобы успешно подключаться к WinRM серверу (имеется в виду серверная часть, принимающая команды), не входящему в тот же домен, что и ваш клиентский компьютер, необходимо на клиенте этот целевой сервер добавить в «доверенный список» следующей командой:

winrm set winrm/config/client @{TrustedHosts=»servername»} , где вместо servername можно указать IP-адрес, либо * (звёздочку).

Для пользователей Windows Vista и Windows 7, работающим не от имени встроенного администратора (обычно так и бывает), нужно выполнить следующую команду

reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

По умолчанию, установлено ограничение на 5 одновременных соединений WinRM от клиента, для увеличения этого числа выполните команду

winrm s winrm/config/winrs @{MaxShellsPerUser=»X»}

winrs.exe
— клиент для отправки запросов к серверной части. Пример: следующая команда принудительно перезагрузит удаленную систему…

winrs -r:servername shutdown /r /t 0

В доменной среде при отправке команд используются учетные данные запустившего пользователя. Для посыла команд от имени другого пользователя используются ключи -u:user -p:pass. Пример: следующая команда очистит локальный кэш DNS-имён на удаленной системе

winrs -r:servername -u:user -p:pass ipconfig /flushdns

Служебные программы, такие как Telnet, и программы удаленного управления, такие как PC Anywhere компании Symantec, позволяют выполнять программы в удаленных системах, однако их не так просто установить, поскольку требуется устанавливать еще и клиентское программное обеспечение в тех удаленных системах, к которым необходимо получить доступ. Программа PsExec — это облегченный вариант Telnet. Она позволяет выполнять процессы в удаленных системах, используя для этого все возможности интерактивного интерфейса консольных приложений, и при этом нет необходимости вручную устанавливать клиентское программное обеспечение. Основное достоинство PsExec — это возможность вызывать в интерактивном режиме интерфейс командной строки в удаленных системах и удаленно запускать такие инструменты как IpConfig. Это единственный способ вывести на экран локального компьютера данные об удаленной системе.

Примечание. Некоторые антивирусные сканеры сообщают, что одна или несколько из этих программ заражены вирусом «remote admin». Ни одна из программ, входящих в набор PsTools, не содержит вирусов, но они использовались вирусами, что и приводит к появлению таких предупреждений.

Установка

Просто скопируйте программу PsExec в папку для исполняемых файлов. При вводе команды psexec на экран выводится справка о синтаксисе команды.

Программа PsExec работает в операционных системах Windows Vista, NT 4.0, Win2000, Windows XP и Server 2003, в том числе в 64-разрядных версиях ОС

Использование

В
статье Марка Руссиновича в выпуске журнала Windows IT Pro Magazine за июль 2004 года описаны дополнительные методы работы с программой PsExec
.

использование: psexec [\компьютер[,компьютер2[,…] | @файл][-u пользователь [-p пароль]][-n s][-l][-s|-e][-x][-i [сеанс]][-c [-f|-v]][-w каталог][-d][-<приоритет>][-a n,n,… ] программа [аргументы]

компьютер

Указывает программе PsExec, что нужно запустить приложение на заданном компьютере или компьютерах. Если имя компьютера не указано, то программа PsExec запустит приложение в локальной системе, если же вместо имени компьютера задан символ «звездочка» (\*), то программа PsExec запустит приложение на всех компьютерах текущего домена.

@файл

Указывает программе PsExec, что нужно запустить приложение на всех компьютерах, перечисленных в заданном текстовом файле.

Процессоры, на которых можно запустить приложение, отделяются запятыми, при этом процессоры нумеруются, начиная с 1. Например, чтобы запустить приложение на процессорах втором и четвертом, введите «-a 2,4»

Указанная программа копируется в удаленную систему для выполнения. Если этот параметр не задан, то приложение должно находиться в системной папке удаленной системы.

Указывает, что не нужно ждать завершения приложения. Этот параметр следует использовать только при запуске неинтерактивных приложений.

Указанный профиль учетной записи не загружается.

Указанная программа копируется в удаленную систему, даже если такой файл в удаленной системе уже есть.

Запускаемая программа получает доступ к рабочему столу указанного сеанса в удаленной системе. Если сеанс не задан, то процесс выполняется в консольном сеансе.

При запуске процесса пользователю предоставляются ограниченные права (права группы администраторов отменяются, и пользователю предоставляются только права, назначенные группе «пользователи»). В ОС Windows Vista процесс запускается с низким уровнем благонадежности.

Позволяет задать задержку подключения к удаленным компьютерам (в секундах).

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

Удаленный процесс запускается из системной учетной записи.

Позволяет указать необязательное имя пользователя для входа в удаленную систему.

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

Позволяет указать для процесса рабочий каталог (путь внутри удаленной системы).

Отображает интерфейс пользователя на рабочем столе Winlogon (только в локальной системе).

-приоритет
(приоритет)

Позволяет задавать для процесса различные приоритеты: -low (низкий), -belownormal (ниже среднего), -abovenormal (выше среднего), -high (высокий) или -realtime (реального времени).

программа

Имя запускаемой программы.

аргументы

Передаваемые аргументы (обратите внимание, что пути файлов должны указываться как локальные пути в целевой системе).

Чтобы задать имя приложения, которое содержит пробелы, используйте кавычки, например psexec \marklap «c:длинное имяapp.exe». Введенные данные передаются в удаленную систему при нажатии клавиши «Ввод», для завершения удаленного процесса нужно нажать сочетание клавиш Ctrl-C.

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

При обращении к локальной системе эту версию программы PsExec можно использовать вместо программы Runas, поскольку для программы PsExec не требуются права администратора.

Примеры

Эта команда вызывает интерактивный интерфейс командной строки в системе \marklap:

psexec \marklap cmd

Эта команда запускает в удаленной системе программу IpConfig с параметром /all и выводит полученные данные на экран локальной системы:

psexec \marklap ipconfig /all

Эта команда копирует программу test.exe в удаленную систему и выполняет ее в интерактивном режиме.

psexec \marklap -c test.exe

Если в удаленной системе такая программа уже установлена и находится не в системном каталоге, укажите полный путь к этой программе

psexec \marklap c:bintest.exe

Эта команда запускает в интерактивном режиме из системной учетной записи программу Regedit для просмотра данных разделов реестра SAM и SECURITY:

psexec -i -d -s c:windowsregedit.exe

Эта команда используется для вызова программы Internet Explorer от имени пользователя с ограниченными правами:

psexec -l -d «c:program filesinternet exploreriexplore.exe»

Понравилась статья? Поделить с друзьями:
  • Как подключиться к другому компьютеру через wifi windows 10
  • Как подключиться к другому компьютеру в домашней сети windows 10
  • Как подключиться к другой сети на компьютере windows 10
  • Как подключиться к домену windows 10 home
  • Как подключиться к домашней группе windows 10 1909