Выполнение удаленных команд
Одна команда Windows PowerShell позволяет запускать команды на одном или сотнях компьютеров. Windows PowerShell поддерживает удаленные вычисления с помощью различных технологий, включая WMI, RPC и WS-Management.
PowerShell поддерживает удаленное взаимодействие WMI, WS-Management и SSH. В PowerShell 7 и более поздних версиях RPC поддерживается только в Windows.
Дополнительные сведения о удаленном взаимодействии в PowerShell см. в следующих статьях:
- Удаленное взаимодействие через SSH в PowerShell
- Удаленное взаимодействие через WSMan в PowerShell
Удаленное взаимодействие с Windows PowerShell без настройки
Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.
В эти командлеты входят следующие:
Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:
Get-Command | Where-Object
Удаленное взаимодействие Windows PowerShell
Благодаря использованию протокола WS-Management служба удаленного взаимодействия Windows PowerShell позволяет запустить любую команду Windows PowerShell на одном или нескольких удаленных компьютерах. Вы можете устанавливать постоянные подключения, запускать интерактивные сеансы и выполнять скрипты на удаленных компьютерах.
Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления. Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.
После настройки службы удаленного взаимодействия Windows PowerShell вы получите доступ ко многим стратегиям удаленного взаимодействия. В этой статье перечислены только некоторые из них. См. дополнительные сведения об удаленном взаимодействии.
Запуск интерактивного сеанса
Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:
Enter-PSSession Server01
В командной строке отобразится имя удаленного компьютера. Все команды, введенные в командной строке, запускаются на удаленном компьютере, а результаты отображаются на локальном компьютере.
Чтобы завершить интерактивный сеанс, введите:
Exit-PSSession
Дополнительные сведения о Enter-PSSession командлетах см Exit-PSSession . в следующих статье:
Выполнение удаленной команды
Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock
Выходные данные будут возвращены на ваш компьютер.
LCID Name DisplayName PSComputerName ---- ---- ----------- -------------- 1033 en-US English (United States) server01.corp.fabrikam.com 1033 en-US English (United States) server02.corp.fabrikam.com
Запуск сценария
Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command . Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.
Например, следующая команда выполняет DiskCollect.ps1 скрипт на удаленных компьютерах, Server01 и Server02.
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1
Установка постоянного подключения
Используйте командлет New-PSSession для создания постоянного сеанса на удаленном компьютере. В следующем примере создаются удаленные сеансы на удаленных компьютерах Server01 и Server02. Объекты сеанса хранятся в переменной $s .
$s = New-PSSession -ComputerName Server01, Server02
После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные из одной команды и использовать их в другой.
Например, следующая команда выполняет Get-HotFix команду в сеансах переменной $s и сохраняет результаты в переменной $h . Переменная $h создается в каждом сеансе из $s , но она не существует в локальном сеансе.
Invoke-Command -Session $s
Теперь вы можете использовать данные в переменной $h с другими командами в том же сеансе. Результаты отобразятся на локальном компьютере. Например:
Invoke-Command -Session $s >
Расширенная служба удаленного взаимодействия
PowerShell включает командлеты, которые позволяют:
- Настройка и создание удаленных сеансов с локальных и удаленных окончаний
- Создание настраиваемых и ограниченных сеансов
- Импорт команд из удаленного сеанса, который фактически выполняется неявно на удаленном сеансе.
- Настройка безопасности удаленного сеанса
PowerShell в Windows включает поставщик WSMan. Поставщик создает диск WSMAN: , который позволяет перемещаться по иерархии параметров конфигурации на локальном и удаленном компьютерах.
См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду Get-Help wsman в консоли Windows PowerShell.
Дополнительные сведения см. в разделе:
- Часто задаваемые вопросы о удаленном взаимодействии PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Справку по ошибкам службы удаленного взаимодействия см. в статье about_Remote_Troubleshooting.
См. также
- about_Remote
- about_Remote_Requirements
- about_Remote_Troubleshooting
- about_PSSessions
- about_WS-Management_Cmdlets
- Invoke-Command
- Import-PSSession
- New-PSSession
- Register-PSSessionConfiguration
- Поставщик WSMan
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Выполнение команд на удалённом Windows
Для запуска команд на удалённом компьютере Windows можно использовать утилиту psexec.exe от Microsoft. Команды можно объединить в bat файл как обычно. Пример удаления установленной на удалённом компьютере программы utorrent:
@echo off taskkill /F /IM utorrent.exe "C:\Users\sklad5\AppData\Roaming\uTorrent\uTorrent.exe" /UNINSTALL /s RD /S /Q "C:\Users\sklad5\AppData\Roaming\uTorrent\"
- Завершаем запущенный процесс utorrent.exe
- Удаляем utorrent, ключ /s означает что удаление будет проходить без каких либо вопросов, т.е. пользователь не будет видеть и знать что сейчас удаляется программа.
- Удаляем каталог программы.
Утилита wmic.exe
Утилита wmic.exe позволяет управлять структурой WMI (Windows Management Instrumentation) не только на локальном компьютере, но и удалённо.
Введя в командной строке команду wmic , получим следующее приглашение:
wmic:root\cli>
Список установленных с помощью msi установщика программ:
/node:\\192.168.1.3 product get name
Удаление программы 7-Zip:
wmic:root\cli>/node: \\192.168.1.3 product where name="7-Zip 9.20" call uninstall
См. также
- Удаленное удаление программ с компьютера — более пространный источник для этой статьи.
Как выполнить команду на удаленном компьютере cmd
Telnet предназначен для входа в другой компьютер через сеть и интерактивной работы на нем («так же, как на своем»).
У telnet есть два режима работы: командный и «режим сессии». Обычно telnet запускают с указанием компьютера, к которому подключиться:
bobby:~% telnet class Trying 193.124.166.227. Connected to class.inp.nsk.su. Escape character is '^]'. Welcome to UNIX login: _
После запуска на экране появляется обычное приглашение для входа в систему, и далее все выглядит точно так же, как на терминале, подключенном к тому компьютеру.
Для завершения telnet-сессии достаточно просто выйти из системы на удаленном компьютере (обычно для этого служит команда » logout «).
Если запустить telnet без указания компьютера, то он переходит в командный режим, выдавая приглашение » telnet> «. Обычно достаточно знать две команды: открыть соединение ( open , или просто o ) и выход ( quit , q ).
Команда open работает точно так же, как если указать telnet при запуске, к какому компьютеру подключиться (сравните с предыдущим примером):
bobby:~% telnet telnet> o class Trying 193.124.166.227. Connected to class.inp.nsk.su. Escape character is '^]'. Welcome to UNIX login: _
Она используется, например, когда не хочется, чтобы по команде ps другие пользователи могли узнать, куда сделан telnet.
Во время работы можно в любой момент перейти в командный режим, нажав Ctrl+] (закрывающая квадратная скобка) (при соединении telnet говорит об этом — «Escape character is ‘^]'»). Вернуться обратно можно, просто нажав Enter .
- Во-первых, если нужно временно «заморозить» telnet (например, надо что-то сделать на локальном компьютере, а открывать другое окно не хочется) — в «сессионном» режиме Ctrl+Z передается на удаленный компьютер (и «замораживает» программу, запущенную там), а в командном — работает как обычно.
- Второй случай — если нужно завершить работу с telnet (а завершить сессию на удаленном компьютере не удается — например, что-то «повисло», и «не отпускает» telnet); при этом используется команда q .
Удаленный вход без пароля: rlogin
Вместо telnet для входа в другой компьютер можно пользоваться программой rlogin (remote login). У нее нет командного режима и при запуске надо просто указывать компьютер. Rlogin работает по другому протоколу и автоматически передает имя пользователя, так что вводить надо лишь пароль:
bobby:~% rlogin class Password: Last login: Sat Mar 13 03:04:52 from Sky You have mail. [bolkhov@Class bolkhov]$ _
Чтобы «заморозить» rlogin, надо нажать символ тильды » ~ » и затем Ctrl+Z . Для «экстренного» завершения сессии надо нажать последовательно тильду и точку — » ~. «. Обе комбинации воспринимаются только сразу после клавиши Enter .
Если требуется зайти на удаленный компьютере под другим именем (а оно ведь в отличие от telnet не спрашивается), то надо указать его в ключе » -l «.
bobby:~% rlogin -l mickey class Password:
У rlogin есть еще одно достоинство: можно сделать так, что при входе пароль не будет спрашиваться!
Для этого надо, чтобы в home-директории на удаленном компьютере был файл с именем » .rhosts «, в котором должны быть перечислены компьютеры, с которых разрешен вход без пароля — по одному имени компьютера в каждой строке. Если надо разрешить вход пользователю с другим именем, то надо указать это имя через пробел после имени компьютера. Пример:
Sky.inp.nsk.su Class.inp.nsk.su Class.inp.nsk.su bagira
В этом примере разрешается беспарольный вход самому пользователю с компьютеров Sky и Class , и пользователю bagira с компьютера Class .
Поскольку файл .rhosts надо сначала создать, то по крайней мере первый раз придется все же зайти, введя пароль.
.rhosts — это как бы «список гостей, которым разрешен вход».
Права на запись в .rhosts должен иметь только сам пользователь — иначе .rhosts просто не используется. Очень рекомендуется также убрать права на его чтение всем, кроме владельца ( chmod 600 .rhosts ).
При указании имен компьютеров надо помнить одну тонкость: это должно быть так называемое каноническое имя, т.е. то, которое является первым в списке имен соответствующего компьютера в DNS. При ссылке на компьютер из другого домена проблем обычно не возникает — указывается просто полное имя (например, sky.inp.nsk.su). Внутри же одной локальной сети на каждом компьютере могут быть свои правила — для одного каноническим является короткое имя, для другого — полное. Чтобы не разбираться каждый раз, как правильно, проще указывать каждую строчку два раза — с полным именем и с коротким. Это позволит также иметь единый файл .rhosts на нескольких компьютерах (возможно, с разными понятиями об именах), просто копируя его между ними. Так, наш пример можно переписать следующим образом:
Sky.inp.nsk.su Sky Class.inp.nsk.su Class Class.inp.nsk.su bagira Class bagira
Общее между telnet и rlogin: escape-символы
И в telnet, и в rlogin для выполнения некоторых нестандартных действий (типа завершения) используются так называемые escape-символы — в первом случае » ^] «, во втором — » ~ «. При этом возникает интересный вопрос: а если, к примеру, зайти по telnet на компьютер A, и с него сделать telnet на компьютер B? Escape-символ будет «пойман» telnet’ом с нашего компьютера на A, а «нажать» его тому, который с A на B, никогда не удастся. Аналогично и с rlogin.
Поскольку такая ситуация хоть редко, но возникает, то и telnet, и rlogin могут использовать другой escape-символ — его можно указать ключом » -e «. Таким образом, telnet на A можно запустить с одним символом, с A на B — с другим, с B на C — с третьим и т.д.
Выполнение команд на удаленном компьютере: rsh
Если настроен вход без пароля по rlogin, то можно прямо со своего компьютера запускать команды на той машине командой rsh (Remote SHell):
bobby:~% rsh class uname -sn Linux Class.inp.nsk.su bobby:~% _
Формат вызова команды rsh такой:
- Во-первых, команды не должны быть интерактивными — к примеру, joe или mc так запустить нельзя, только команды, которые что-то делают и/или печатают на экране — cp, ls, rm и т.д. (хотя графические программы под X-Window запускать можно — они не взаимодействуют с терминалом).
- Во-вторых, поскольку специальные символы ?, *, , [, ] и т.д. «разбираются» оболочкой (shell), то команду с такими символами надо «кавычить» — указывать в одинарных апострофах (так они «защищаются» от интерпретации локальным shell’ом):
bobby:~% rsh class ls -l inpunix.* zsh: no matches found: inpunix.* bobby:~% rsh class 'ls -l inpunix.*' -rw-r--r-- 1 goofy goofy 1445018 Mar 8 04:06 inpunix.tgz bobby:~% _
Прервать команду, запущенную через rsh, обычно можно по Ctrl+C .
Если не указать команду, а просто » rsh «, то rsh работает как rlogin. Поэтому обычно (из лени 😉 набирают rsh вместо rlogin .
Копирование файлов с удаленного компьютера: rcp
Если настроен вход без пароля по rlogin/rsh, то для копирования файлов с/на удаленный компьютер применять команду rcp (remote cp). В использовании она очень похожа на cp:
Но в имени файла можно указывать компьютер: например, » sky:/etc/fstab » означает «файл /etc/fstab на компьютере sky». При этом если имя файла не начинается с » / «, то оно «считается» с home-директории на удаленном компьютере. Пример:
bobby:/tmp/f% ls -l total 0 bobby:/tmp/f% rsh sky ls -l /etc/fstab -rw-r--r-- 1 root sys 4501 Feb 24 20:07 /etc/fstab bobby:/tmp/f% rcp sky:/etc/fstab . bobby:/tmp/f% ls -l total 5 -rw-r--r-- 1 ivanov lab5 4501 Mar 13 16:41 fstab bobby:/tmp/f% _
Если надо «зайти» под пользователем с другим именем, то имя указывается через » @ » перед именем компьютера: bagira@class:/etc/issue .
Rcp воспринимает ключи » -r » и » -p » аналогично обычной команде cp.
- Во-первых, аналогично rsh, спецсимволы ?, * и т.д. надо «кавычить».
- Во-вторых, при команде вида
Более надежная замена для rlogin/rsh/rcp: ssh
- Данные, включая пароли, передаются по сети в открытом виде — воспользовавшись любой программой-шпионом сети, можно их перехватить.
- .rhosts (авторизация по имени компьютера и пользователя) дает довольно слабую гарантию защиты.
Для преодоления этих проблем была создана команда ssh (Secure SHell). Она используется практически так же, как rsh (и есть аналоги rlogin/rcp — slogin и scp), но применяет для авторизации и передачи данных криптографические алгоритмы. Настраивать ssh несколько сложнее, чем rsh, и о ней будет подробно рассказано в специальной лекции.
Как выполнить команду на удаленном компьютере cmd
Сообщения: 33
Благодарности: 0
Всем привет.
кто подскажет как запустить cmd на удаленной машине чтобы cmd отобразилось у меня на машине вводя команды в cmd чтобы они работали на удаленной машине а не на моей! так пробЫвал psexec \\server cmd.exe не чего не выходит.
кто может подскажет. что не так получается в сеть доменная!
зарание благодарю!
Сообщения: 53186
Благодарности: 15435
Конфигурация компьютера | |
Процессор: AMD Ryzen 7 7800X3D | |
Материнская плата: Gigabyte B650E Aorus Master | |
Память: Kingston Fury Renegade DDR5-6000 32GB (2×16) | |
HDD: Samsung SSD 850 PRO 256GB, 980 PRO 1TB | |
Видеокарта: Gainward GeForce RTX 3080 追风 | |
Блок питания: be quiet! Straight Power 11 650W | |
Монитор: ASUS VG248QE 24″ | |
ОС: Windows 10 Pro x64 | |
Прочее: корпус Fractal Design Define R4 |
Mickle, командой Telnet (чтобы коннектилась, надо сначала включить на удаленной машине одноименную службу).
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
Сообщения: 3665
Благодарности: 1563
Цитата Mickle:
psexec \\server cmd.exe не чего не выходит » |
нужны админские права на удаленной машине, попробуте в командной строке указать явно имя/пароль локального Администратора, читайте сообщения psexec
Сообщения: 33
Благодарности: 0
права есть админа и пароль пробЫвал psexec \\b020301 -p passw -u admin не чего не выходит. а как через Telnet как эту службузапустить? может пример кто подкинет через Telnet или PsExec. я делаю прогу которая устанавливает серверную часть радмина вот мне и нужно R_Server запустить на удаленной машине. зарание благодарю! у меня cmd на удаленной машине запускается, но не одна команда не выполняется((((
Последний раз редактировалось Mickle, 15-09-2010 в 08:00 . Причина: 1
Сообщения: 27449
Благодарности: 8086
Для psexec.exe: попробуйте проверить наличие и доступность на удалённой машине административного ресурса ADMIN$ и доступность порта 445 (и, возможно, 139): psexec cannot execute . check Admin$ share — Sysinternals Forums
Сообщения: 33
Благодарности: 0
а как проверить admin$ ну я на той машине на которой тестирую админ! и как порт 445 проверить.
Сообщения: 27449
Благодарности: 8086
Если не пользуетесь Far Manager’ом — тогда, например, так:
dir \\RemoteMachineName\Admin$
Цитата Mickle:
и как порт 445 проверить. » |
Ссылку я приводил выше, попробуйте.
Сообщения: 33
Благодарности: 0
что то у меня не то может я что не так делаю! а экзешник только спомощью psexec можно запустить на удаленной машине или еще есть какие-нибуть варианты? я приложение на Delphi пишу!
Сообщения: 27449
Благодарности: 8086
Цитата Mickle:
а экзешник только спомощью psexec можно запустить на удаленной машине или еще есть какие-нибуть варианты? » |
ИО Капитана Очевидности
Сообщения: 5383
Благодарности: 1105
Цитата Mickle:
кто подскажет как запустить cmd на удаленной машине чтобы cmd отобразилось у меня на машине вводя команды в cmd чтобы они работали на удаленной машине а не на моей! » |
Проще всего запустить службу Telnet (по умолчанию отключена), а потом из консоли выполнить команду telnet IP и ввести логин-пароль пользователя. Всё, теперь все команды будут выполняться на той машине от имени указанного пользователя.
Но по соображениям безопасности telnet использовать настоятельно не рекомендуется. Сейчас для этих целей используется ssh. Правда, в Windows стандартной службы для этого протокола нет, однако можно использовать сторонние бесплатные разработки, например FreeSSHD, который при подключении также запускает системный CMD (можно указать другую программу) от имени указанного пользователя.
В качестве клиента, ввиду отсутствия стандартного, чаще всего используется Putty.
——-
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)
Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.