Контексты Netsh
Netsh взаимодействует с другими компонентами операционной системы с помощью файлов библиотеки динамической компоновки (DLL).
Каждая вспомогательная библиотека DLL Netsh предоставляет широкий набор функций, называемых контекстом, который представляет собой группу команд для определенной серверной роли или возможности в сети. Эти контексты расширяют функциональные возможности Netsh, обеспечивая поддержку конфигурации и мониторинга для одной или нескольких служб, служебных программ или протоколов. Например, Dhcpmon.dll предоставляет для Netsh контекст и набор команд для настройки DHCP-серверов и управления ими.
Получение списка контекстов
Список контекстов Netsh можно получить, открыв командную строку или Windows PowerShell на компьютере под управлением Windows Server 2016 или Windows 10. Введите команду netsh и нажмите клавишу ВВОД. Введите /? и нажмите клавишу ВВОД.
Ниже приведен пример выходных данных для этих команд на компьютере под управлением Windows Server 2016 Datacenter.
Подконтексты
Контексты Netsh могут содержать как команды, так и дополнительные контексты, называемые подконтекстами. Например, в контексте маршрутизации можно перейти на подконтексты IP и IPv6.
Чтобы отобразить список команд и подконтекстов, которые можно использовать в контексте, в командной строке netsh введите имя контекста, а затем введите /? или Help. Например, чтобы отобразить список подконтекстов и команд, которые можно использовать в контексте маршрутизации, в командной строке Netsh (т. е. netsh ) введите одно из следующих действий:
routing /?
routing help
Для выполнения задач в другом контексте без перехода из текущего контекста введите путь контекста команды, которую необходимо использовать в командной строке Netsh. Например, чтобы добавить интерфейс с именем «Local Area Connection» («Подключение по локальной сети») в контексте IGMP без предварительного перехода на этот контекст, введите в командной строке Netsh следующую команду:
routing ip igmp add interface «Local Area Connection» startupqueryinterval=21
Удаленное управление компьютером windows из командной строки
Приветствую. Иногда возникают задачи когда нужно что-либо сделать на удаленном компьютере, при этом либо нет возможности подключиться по RDP, например, если вдруг сервер сильно загружен, и ему не хватит ресурсов для запуска терминальной сессии (да да, у меня такое встречалось, не сказать что часто, но бывало
). Либо из командной строки задачу сделать быстрее. Ну или еще как вариант, если нужно что то сделать скрытно, в том случае если пользователь в момент когда это нужно сделать работает за компьютером. Пользователям Linux с этим гораздо проще, у них есть ssh. Но и в Windows есть возможность подключаться, с позволения сказать, в командную строку.
В общем и целом на помощь к нам приходят утилиты SysInternals, а именно – pstools, а еще конкретнее – psexec из этого набора утилит. Скачать это добро можно <!]>здесь<!]>.
После того как скачали, нужно эти утилиты разархивировать куда-нибудь. Я обычно на диске C: создаю папку ps, что бы удобнее было добираться до утилит. Установки они не требуют. Для того что бы подключиться к удаленному компьютеру в командной строке набираем:
За место cmd можно например запустить какой-нибудь батник или другую команду.
Видео по теме:
Удаленный вход без пароля: rlogin
Вместо telnet для входа в другой компьютер можно пользоваться
программой rlogin (remote login). У нее нет командного режима
и при запуске надо просто указывать компьютер. Rlogin работает по
другому протоколу и автоматически передает имя пользователя, так что
вводить надо лишь пароль:
bobby:~% rlogin class Password: Last login: Sat Mar 13 03:04:52 from Sky You have mail. $ _ |
Чтобы «заморозить» 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 |
ВЫПОЛНЕНИЕ КОМАНД В PSSESSION
С помощью PSSession можно выполнять ряд удаленных команд, которые совместно используют данные, такие как функции, псевдонимы и значения переменных. Чтобы выполнить команды в PSSession, используйте параметр Session командлета Invoke-Command.
Например, следующая команда использует командлет Invoke-Command для выполнения команды Get-Process в PSSessions на компьютерах Server01 и Server02.
Команда сохраняет процессы в переменной $p в каждой psSession.
Так как PSSession использует постоянное подключение, можно выполнить другую команду в той же среде PSSession, которая использует переменную $p. Следующая команда подсчитывает количество процессов, сохраненных в $p.
Служба удаленного взаимодействия Windows PowerShell
Благодаря использованию протокола WS-Management служба удаленного взаимодействия Windows PowerShell позволяет запустить любую команду Windows PowerShell на одном или нескольких удаленных компьютерах. Вы можете устанавливать постоянные подключения, запускать интерактивные сеансы и выполнять скрипты на удаленных компьютерах.
Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления.
Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.
После настройки службы удаленного взаимодействия Windows PowerShell вы получите доступ ко многим стратегиям удаленного взаимодействия.
В этой статье перечислены только некоторые из них. См. дополнительные сведения об удаленном взаимодействии.
Запуск интерактивного сеанса
Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession.
Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:
В командной строке отобразится имя удаленного компьютера. Все команды, введенные в командной строке, запускаются на удаленном компьютере, а результаты отображаются на локальном компьютере.
Чтобы завершить интерактивный сеанс, введите:
См. дополнительные сведения о командлетах Enter-PSSession и Exit-PSSession:
- Enter-PSSession
- Exit-PSSession;
Выполнение удаленной команды
Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:
Выходные данные будут возвращены на ваш компьютер.
Запуск сценария
Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета . Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.
Например, следующая команда выполняет скрипт DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.
Установка постоянного подключения
Используйте командлет для создания постоянного сеанса на удаленном компьютере. В следующем примере создаются удаленные сеансы на удаленных компьютерах Server01 и Server02. Объекты сеанса хранятся в переменной .
После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные из одной команды и использовать их в другой.
Например, следующая команда выполняет команду Get-Hotfix в сеансах в переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом сеансе в переменной $s, но она не существует в локальном сеансе.
Теперь вы можете использовать данные в переменной с другими командами в том же сеансе. Результаты отобразятся на локальном компьютере. Пример:
Расширенная служба удаленного взаимодействия
Это и есть служба удаленного взаимодействия Windows PowerShell. Используя командлеты, установленные с Windows PowerShell, можно установить и настроить удаленные сеансы с локальных и удаленных компьютеров, создать настраиваемые и ограниченные сеансы, разрешить пользователям импортировать команды из удаленного сеанса, которые могут неявно выполняться в удаленном сеансе, настроить безопасность удаленного сеанса и многое другое.
Windows PowerShell включает поставщик WSMan. Поставщик создает диск , который позволяет перемещаться по иерархии параметров конфигурации на локальном и удаленном компьютерах.
См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду в консоли Windows PowerShell.
Дополнительные сведения можно найти в разделе
- Вопросы и ответы об удаленном взаимодействии PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Справку по ошибкам службы удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.
ВЫПОЛНЕНИЕ УДАЛЕННОЙ КОМАНДЫ
Чтобы выполнить другие команды на удаленных компьютерах, используйте командлет Invoke-Command.
Чтобы выполнить одну или несколько несвязанных команд, используйте параметр ComputerName Invoke-Command для указания удаленных компьютеров. Используйте параметр ScriptBlock, чтобы указать команду.
Например, следующая команда выполняет команду Get-Culture на компьютере Server01.
Параметр ComputerName предназначен для ситуации, в которой выполняется одна команда или несколько несвязанных команд на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, используйте параметр Session.
Как запустить команду как пользователь 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
Как установить powershell в linux
PowerShell работает также и в Linux, но некоторые команды PowerShell отсутствуют в Linux. При запуске скриптов PowerShell в Linux возникнут проблемы в следующих случаях:
- в скрипте используются команды, которые отсутствуют в Linux версии PowerShell (например, из-за того, что связаны с настройками Windows или неприменимы для Linux по другим причинам)
- скрипт обращается к переменным окружения Windows
- в скрипте используются утилиты Windows, отсутствующие в Linux
Могут быть и другие причины проблем, но много всё равно работает.
Многие дистрибутивы Linux поддерживаются официально и простые инструкции по установке PowerShell в свой дистрибутив, а также установочные файлы вы найдёте здесь:
Просмотр
- Как включить удаленное взаимодействие PowerShell?
- Какая команда PowerShell используется для запуска интерактивного сеанса с удаленным компьютером?
- В чем преимущество использования сеанса удаленного взаимодействия PowerShell по сравнению с простым указанием имени компьютера с помощью каждой команды?
- Можно ли использовать сеанс удаленного взаимодействия PowerShell с сеансом удаленного взаимодействия «один к одному»?
- Чем отличается тип объектов, возвращаемых командлетами, от типа объектов, которые возвращаются при выполнении этих же командлетов на удаленных компьютерах с ?
Удаленное управление сеансом пользователя windows стандартными средствами
Однажды мне захотелось управлять одним из домашних компьютеров удаленно, но при этом взаимодействовать с текущим пользователем, но компьютер был довольно слабый и при запуске например TeamViewer’а нагрузка процессора поднималась до 98% и компьютер начинал заметно тормозить. Попробовал стандартный RDP, но тогда «выбивался» текущий пользователь и для входа локально приходилось набивать пароль. Но чуть позже мне случайно попалась команда
shadow
Наблюдать за другим сеансом служб удаленных рабочих столов.SHADOW {<имя сеанса> | <ID сеанса>} <имя сеанса> Имя сеанса.<ID сеанса> Идентификатор сеанса./SERVER:<сервер> Сервер терминалов (по умолчанию текущий)./V Отображение информации о выполненных действиях.
Например для управления консольным сеансом(пользователем который непосредственно сидит перед компьютером) текущего терминального сервера достаточно ввести команду выполнить –shadow 0. Выход осуществляется через alt * на обычном компьютере и через ctrl * на терминальном сервере.Но есть неприятная особенность: эта команда работает только из под rdp сессии. Но мой управляемый компьютер был под управлением windows xp поэтому пришлось расширить его возможности сделав из него терминальный сервер (в интернете полно статей как это можно сделать). Тогда все стало довольно просто, подключаемся любым пользователем с правами администратора по rdp и запускаем команду выполнить –shadow 0 попадаем в консольный сеанс, собственно что мне и нужно было. Для уменьшения аппаратных затрат можно при создании rdp подключения выбрать функцию «При подключении запускать следующую программу» и там набрать shadow 0 как на рисунке.
Тогда получается что запускается всего 2 процесса.
Для того что бы все это работало нам необходимо сначала включить RemoteRPC, например через реестр:
“AllowRemoteRPC”=dword:00000001
После этого можно будет через Диспетчер служб удаленных рабочих столов посмотреть какие пользователи залогинены на компьютере, какие у них id и какие процессы запущены (жаль только названия, нет информации о нагрузке).
По умолчанию пользователю будет задаваться вопрос с разрешением управления, можно отключить вопрос или сделать только удаленное наблюдение, меняется через реестр:
«Shadow»=dword:0000000x
Где x может иметь значения:0 — удаленное управление не разрешено1 -полный контроль с разрешения клиента2 -полный контроль без разрешения клиента3 -наблюдение за сеансом с разрешением клиента4 -наблюдение за сеансом без разрешения клиента
По умолчания этой строчки вообще нет и её нужно будет создавать.
Так же можно включить через групповые политики локальные или доменные. Для включения локально запускаем gpedit.msc — выбираем административные шаблоны — добавление и удаление шаблонов, добавляем System.adm из папки WINDOWSinf
Теперь настраиваем: конфигурация компьютера — административные шаблоны — компоненты windows — службы терминалов — устанавливает правила для удаленного управления. Для windows xp.
И конфигурация компьютера — административные шаблоны — компоненты windows- службы удаленных рабочих столов – узел сеансов удаленных рабочих столов – подключения – устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов. Для windows 7.Все это работает и в домене, если у пользователя есть соответствующие права.
В доменных настройках профиля пользователя тоже есть настройка подобных прав (я встречал эти настройки даже в домене win 2000)
Если рассматривать терминальный сервер, то там через свойства RDP(через конфигурация узла сеансов удаленных рабочих столов) можно выставить любому пользователю права на удаленное управление,
и отдельно настроить взаимодействие или управление удаленным сеансом.
Для удобства можно подключаться через диспетчер задач
Как получить информацию об удалённой системе с 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 показывает имя загруженного драйвера
Enable PSRemoting Remotely with Group Policy
If you want to enable PSRemoting on multiple computers remotely, you can achieve this by configuring three group policies.
1. Enable the WinRM service
First you will need to enable the WinRM service through group policy.
You can follow the below steps to enable the WinRM service:
1. Open Group Policy Management Editor and Navigate to:
Computer Configuration => Policies => Administrative Templates => Windows Components => Windows Remote Management (WinRM) => WinRM Service as shown below:
2. Click on the Allow remote server management through WinRM, you should see the following screen:
3. Next, enable this policy and set the IPv4/IPv6 filters to all (*) and click on the OK button.
2. Set the WS-Management service to automatic startup
You can follow the below steps to set the WS-Management service to automatic startup:
1. Open Group Policy Management Editor and Navigate to:Computer Configuration => Policies => Windows Settings => Security Settings => System Services, you should see the following screen:
2. Now, click on the Windows Remote Management (WS-Management), you should see the following screen:
3. Now Enable this service to start automatically and click on the OK button.
3. Allow Windows Remote Management in the Firewall
You can allow windows remote management in the firewall by following the below steps:
1. Open Group Policy Management Editor and Navigate to:Computer Configuration => Policies => Windows Settings => Security Settings => Windows Firewall with Advanced Security => Windows Firewall with Advanced Security as shown below:
2. Next, right-click Inbound Rules and click New Rule, in the Predefined field, select Windows Remote Management as shown below:
3. Then we’ll click on the Next button and follow the instruction to finish the setup.
Как копировать исполнимый файл с локального на удалённую систему
Выполнение команд в удалённой системе — очень полезная функция, но есть и другая полезная функция, которая облегчит работу системных администраторов и пентестеров. 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.
ВЫПОЛНЕНИЕ УДАЛЕННОЙ КОМАНДЫ
Чтобы выполнить другие команды на удаленных компьютерах, используйте командлет Invoke-Command.
Чтобы выполнить одну или несколько несвязанных команд, используйте параметр ComputerName Invoke-Command для указания удаленных компьютеров. Используйте параметр ScriptBlock, чтобы указать команду.
Например, следующая команда выполняет команду Get-Culture на компьютере Server01.
Параметр ComputerName предназначен для ситуации, в которой выполняется одна команда или несколько несвязанных команд на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, используйте параметр Session.
Проксирование
Этот метод отличается от всех вышеперечисленных, и служит совсем для других задач, но не менее актуален. Когда делегирование полномочий невозможно, или предоставляет слишком большие возможности, он позволяет разрешить обычному пользователю выполнять некую команду. Требующую административных привилегий, никаким образом не выдавая дополнительных полномочий и не подставляя под угрозу пароль администратора.
Чаще всего такие проблемы люди решают с помощью утилит вроде cpau.exe. Они создают файл с зашифрованным паролем административной учетной записи, позволяющий запускать определённую программу. Проблема, однако, в том, что хоть пароль и зашифрован, перед запуском программы утилите придётся его расшифровать. А соответственно пользователь может использовать утилиту повторяющую алгоритм расшифровки пароля, и узнать его, чтобы затем использовать для запуска других программ или получения дополнительных привилегий. Практически это конечно достаточно сложно для обычных пользователей, не обладающих специальными знаниями, но, тем не менее, вполне возможно. Еще раз уточню, это не беда конкретной утилиты, а проблема такого подхода вообще.
Еще может показаться, что для решения задачи подойдет параметр /savecred утилиты runas. Но тут есть даже две проблемы. Во-первых, как и вышеописанном случае, пароль сохраняется на компьютере пользователя, а, следовательно, может быть расшифрован, хотя в случае с runas для этого и понадобятся права локального администратора. Во-вторых, runas сохраняет учетные данные, не связывая их с конкретной командой, а, следовательно, пользователь сможет запустить с завышенными правами не только ту команду, доступ к которой вы хотели ему предоставить, но и любую другую.
Чтобы избежать этих проблем, но, тем не менее, разрешить выполнение конкретной команды, можно использовать методику, которая называется «проксированием».
Работает она следующим образом. На компьютере постоянно работает сценарий с высокими привилегиями. Например, в нашем случае он будет запущен из-под учетной записи, обладающей правами администратора на файловом сервере. По сигналу пользователя он будет выполнять одну, заранее определённую команду. В этом примере – закрывать все файлы, открытые по сети.
Для организации этой системы мы поместим на сервере, например в папке c:\scripts\ командные файлы Server.cmd и Action.cmd .
Листинг №5 – Action.cmd (Windows Batch)
Server.cmd будет ждать знака от пользователя, и получив его, запускать файл с командами – Action.cmd. Разумеется, в эту папку пользователи не должны иметь никакого доступа. Автоматический запуск Server.cmd при запуске компьютера можно организовать, просто создав соответствующую задачу в планировщике:
После параметра /ru указывается учетная запись, под которой будет выполняться сценарий (в нашем случае она обладает правами администратора на сервере), так как после параметра /rp пароль не указан – он будет запрошен при создании задачи. Параметр /sc позволяет указать момент запуска сценария, в нашем случае – при включении компьютера. Ну а /tn и /tr позволяют указать имя задачи, и исполняемый файл.
Теперь, для того чтобы пользователь мог подать сценарию сигнал, мы создадим папку c:\commandShare и сделаем её доступной по сети. Доступ на запись в эту папку должен быть только у тех пользователей, которые будут запускать команду.
После этого достаточно будет поместить пользователю на рабочий стол файл Run.cmd.
Листинг №6 – Run.cmd (Windows Batch)
При его выполнении, от имени пользователя, будет создаваться файл \\server\commandShare\trigger.txt. Сценарий Server.cmd, заметив его, запустит на выполнение со своими привилегиями файл Action.cmd. Он добавит запись в файл c:\scripts\log.txt о текущем времени, а затем удалит trigger.txt .Чтобы не выполнять команду снова до следующего сигнала пользователя.
В сценарии Server.cmd используется утилита Sleep.exe, позволяющая сделать паузу в выполнении сценария на заданный в секундах промежуток времени. Она не входит в состав операционной системы, но её можно взять из набора Resource Kit Tools (см. ссылки) и просто скопировать на любой компьютер.
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.
Примечание:
Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.
После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):
Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.
Выполнить команду на удалённом компьютере
Как видно на, можно передавать сразу несколько команд в одном блоке, помещать их результаты выполнения на нескольких компьютерах в переменную, а затем обрабатывать на рабочей станции используя возможности Windows PowerShell по работе с объектами.
Впрочем возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.
Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка c:\computers.txt.
Выполнить команду на удалённом компьютере
Переименование удалённого ПК
Текущее имя ПК можно увидеть через запрос к значению в реестре:
reg query «HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName» /v ComputerName
Изменяем в реестре имя ПК на New-PC-Name:
reg add «HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName» /v ComputerName /t REG_SZ /d «New-PC-Name» /f
reg add «HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters» /v ComputerName /t REG_SZ /d «New-PC-Name» /f
Для вступления в силу нового имени нужно перезагрузить компьютер:
shutdown /r /f /t 180
Здесь мы дали пользователю 3 минуты (180 секунд) на закрытие документов, но можно этот параметр изменить в соответствии со случаем.
Удаленное взаимодействие с Windows PowerShell без настройки
Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.
В эти командлеты входят следующие:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:
Что нужно для psexec
Для работы PsExec на удалённом компьютере не требуется никакого программного обеспечения — то есть на компьютере, которым вы будете управлять, не нужно устанавливать никакую клиентскую часть. Но нужно соблюдение некоторых условий, чтобы PsExec работала, поэтому если первая попытка не удалась, то проверьте следующие требования.
1. На обеих машинах, т.е. удалённом компьютере (которым будем управлять) и локальном компьютере (с которого будем управлять), должен быть включён общий доступ к файлам и принтерам. Для их включения смотрите статью «SMB: настройка общей сетевой папки в Windows».
Как работать с командлетами, которые имеют параметр computername для дистанционного получения данных
Некоторые командлеты имеют параметр ComputerName, он позволяет получать объекты с удаленных компьютеров.
Поскольку эти командлеты не используют WS-Management на базе Windows PowerShell Remoting, вы можете использовать параметр ComputerName этих командлетов на любом компьютере под управлением Windows PowerShell. Компьютеры могут быть не настроены для работы Windows PowerShell Remoting, и компьютеры могут не отвечать требованиям к системам для удаленного доступа.
Ниже приведён список командлетов имеющих параметр ComputerName:Clear-EventLogGet-CounterGet-EventLogGet-HotFixGet-ProcessGet-ServiceGet-WinEventGet-WmiObjectLimit-EventLogNew-EventLogRemove-EventLogRestart-ComputerStop-ComputerShow-EventLogTest-ConnectionWrite-EventLog
Для примера, следующая команда получает службы на удаленном компьютере Server01:
Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:
Как перенаправить вывод команды psexec
После запуска команды в удалённой системе вывод команды будет напечатан в текущий стандартный вывод, который является нашей текущей оболочкой (окном командной строки). Этот вывод может быть перенаправлен в файл с помощью символа >. Если у нас много удалённых систем для запуска команд, эта опция будет очень полезна.
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 ipconfig > HACKWARE-SERVER_ifconfig
В этом примере выходные данные команды ipconfig сохраняются в файл с именем HACKWARE-SERVER_ifconfig.
Для вывода содержимого файла можно использовать команду Get-Content или её более короткий псевдоним cat:
cat .HACKWARE-SERVER_ifconfig
Как перенаправить вывод команды psexec
После запуска команды в удалённой системе вывод команды будет напечатан в текущий стандартный вывод, который является нашей текущей оболочкой (окном командной строки). Этот вывод может быть перенаправлен в файл с помощью символа >. Если у нас много удалённых систем для запуска команд, эта опция будет очень полезна.
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 ipconfig > HACKWARE-SERVER_ifconfig
В этом примере выходные данные команды ipconfig сохраняются в файл с именем HACKWARE-SERVER_ifconfig.
Для вывода содержимого файла можно использовать команду Get-Content или её более короткий псевдоним cat:
cat .HACKWARE-SERVER_ifconfig