Служба удаленного управления Windows является одним из компонентов функций управления оборудованием Windows, которые управляют аппаратным обеспечением сервера локально и удаленно.
Компоненты WinRM и управление оборудованием
Ниже приведен список компонентов и функций, предоставляемых службой WinRM и функцией мониторинга оборудования.
-
API сценариев WinRM
Этот API-интерфейс сценариев позволяет получать данные с удаленных компьютеров с помощью сценариев, выполняющих операции WS-Management протоколов.
-
WinRM. cmd
Это средство командной строки для управления системой реализуется в файле Visual Basic Scripting Edition (Winrm.vbs), написанном с помощью API-интерфейса для сценариев WinRM. Это средство позволяет администратору настраивать WinRM и получать данные или управлять ресурсами. Дополнительные сведения см. в справке в Интернете, предоставляемой командной строкой WinRM /?.
-
Winrs.exe
Это средство командной строки позволяет администраторам удаленно выполнять большинство Cmd.exeных команд с помощью протокола WS-Management. Дополнительные сведения см. в справке в Интернете, предоставляемой командной строкой WinRS /?.
-
Драйвер IPMI и поставщик WMI
Управление оборудованием с помощью поставщика IPMI и драйвера позволяет контролировать и диагностировать аппаратное обеспечение удаленного сервера через контроллеры BMC, если операционная система не запущена или не развернута.
Дополнительные сведения см. в разделе поставщик IPMI.
-
Служба WMI
Служба WMI продолжит работать параллельно с WinRM и предоставляет запрошенные данные или элементы управления через подключаемый модуль WMI. Вы можете продолжить получать данные из стандартных классов WMI, таких как _ процесс Win32, а также данных, предоставленных IPMI. Дополнительные сведения о настройке и установке, необходимые для WinRM, см. в разделе Введение в Управление оборудованием.
-
Протокол WS-Management
Протокол WS-Management, основанный на протоколе SOAP, разработан для систем, предназначенный для выявления и обмена данными управления. Цель спецификации протокола WS-Management заключается в обеспечении взаимодействия и согласованности систем предприятия, имеющих компьютеры, работающие на различных операционных системах разных поставщиков.
WS-Management протокол основан на следующих стандартных спецификациях веб-служб: HTTPS, SOAP по HTTP (WS-I Profile), SOAP 1,2, WS-Addressing, WS-передачи, WS-enumeration и WS-Eventing. Дополнительные сведения о текущем черновике спецификации см. на странице индекс спецификаций управления.
Источник: http://docs.microsoft.com/ru-ru/windows/win32/winrm/about-windows-remote-management
Выполнить команду на удалённом компьютере через PsExec.exe
Один из моих любимых способов для решения этой задачи это утилита командной строки PsExec.exe написанная Марком Руссиновичем, которую вы можете свободно скачать с сайта Windows SysInternals. Ссылку на неё вы можете найти в конце статьи. Она не требует установки в систему, вы можете просто скопировать её в одну из папок, содержащихся в переменной окружения %path% и вызывать из любой оболочки командной строки: Cmd или PowerShell.
Использовать PsExec очень просто. Например, чтобы выполнить ipconfig /flushdns на компьютере main, достаточно запустить следующую команду:
psexec \main ipconfig /flushdns
Команда ipconfig будет запущена на компьютере main под вашими учетными данными. После завершения работы ipconfig весь текстовый вывод будет передан на ваш компьютер, а кроме того будет возвращён код выхода команды (error code). В случае если команда выполнилась успешно, он будет равен 0.
Выполнить команду на удалённом компьютере
Разумеется, на этом возможности PsExec не заканчиваются. Вызвав утилиту без параметров, можно посмотреть другие доступные опции. Я обращу внимание лишь на некоторые из них.
Ключ -d говорит PsExec что ненужно дожидаться выполнения команды, а достаточно лишь запустить её, и забыть. В этом случае мы не получим выходных данных от консольной утилиты, но зато сможем не дожидаясь завершения предыдущей команды запускать другие. Это очень полезно, если вам необходимо запустить, например установщик программы на нескольких компьютерах.
По умолчанию PsExec выполняет команды в скрытом режиме, то есть на системе где выполняется команда, не будут выводиться никакие окна или диалоги. Однако есть возможность изменить это поведение, с помощью ключа -i . После него можно указать номер сессии, в которой выводить окна, а можно и не указывать, тогда интерфейс будет отображен в консольной сессии.
Таким образом, чтобы вывести окно с информацией о версии операционной системы на компьютере main, следует запустить PsExec таким образом:
psexec -i \main winver.exe
Если вы хотите выполнить команду сразу на нескольких компьютерах, вам пригодится возможность прочитать их имена из текстового файла списка.
psexec @c:comps.txt systeminfo.exe
Ну и одной из самых полезных способностей PsExec является возможность интерактивного перенаправления ввода/вывода между компьютерами, что позволяет нам запустить, например cmd.exe на удалённом сервере, а давать ему команды и получать результаты на локальном компьютере.
Выполнить команду на удалённом компьютере
Каким образом работает 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 это делается следующим образом:
$Computer = «main»
$Command = «cmd.exe /c systeminfo.exe > \servershare%computername%.txt»
([wmiclass]»\$Computerrootcimv2:Win32_Process»).create($Command)
Здесь в качестве запускаемого процесса я указал cmd.exe, а уже ему, в качестве аргументов передал нужную команду. Это необходимо в случае если вам нужно использовать переменные окружения удалённого компьютера или встроенные операторы cmd.exe, такие как «>» для перенаправления вывода в файл. Метод Create не дожидается завершения процесса, и не возвращает результатов, но зато сообщает нам его идентификатор – ProcessID.
Если вы используете компьютер, на котором пока не установлен PowerShell, вы можете вызвать этот метод WMI и из сценария на VBScript. Например вот так:
Источник: http://setiwik.ru/vypolnit-komandu-na-udaljonnom-pk/
Решаем задачи Абрамян на C. Matrix78
05.04.2017Проверка знаний
Matrix78. Дана матрица размера $$M times N$$. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.
Читать далее
Источник: http://coolcode.ru/powershell-reshenie-problem-svyazyinnyih-s-udalyonnyim-podklyucheniem-about_remote_troubleshooting/
Получение списка служб
Узнать статус всех служб можно так:
Get-Service
Каждый результат выдаваемый командами в PS представляет собою объект. Этот объект содержит разные свойства и методы. Свойства — это например имя или статус. По умолчанию мы видим не все свойства. Что бы узнать какие еще свойства есть у команды нужно выполнить следующее:
Get-Service | Get-Member -MemberType Properties
Часть свойств реализована в виде ключей. Попробуем вывести сразу все свойства всех сервисов, но в таком случая вывод будет сложно читаемый:
Get-Service | SELECT *
Возможно вывести только имена, статус и тип запуска:
Get-Service | Ft Name, Status, StartType
Или выведем информацию по одному сервису:
Get-Service «WinRM» | Ft Name, Status, StartType
У сервисов есть короткое имя и отображаемое. Так мы выведем оба:
В именах мы можем использовать маски, а это значит что мы можем не знать полное название и использовать знак * в том месте, где не уверены в названии или написании:
Get-Service -DisplayName «Win*» | Ft Name, DisplayName, Status, StartType
Не желательно указывать отображаемое имя так как язык операционных систем может быть разным и если вы выполняете командлеты удаленно, вероятно будут ошибки:
- Cannot find any service with service name
- Cannot find any service with display name
- Не удается найти службу с отображаемым именем
Кроме этого есть два ключа, которые тоже поддерживают маски:
- Include — включают поиск по какой-то маске или точному соответствию.
- Exclude — исключает упоминание.
Можно сравнить разницу с прошлым примером:
Get-Service -Name «Win*» -Include «*RM» -Exclude «*mgmt»,»*Http*»,»*Defend» | Ft Name, Status, StartType
У сервисов несколько статусов:
- Running — запущен.
- Stopped — остановлен.
- Paused — приостановлен (пауза).
По каждому из них мы можем отфильтровать результат:
Get-Service | where -Property Status -eq Stopped
Кроме этого есть 3 типа запуска:
- Automatic — автоматический запуск вместе с системой.
- AutomaticDelayedStart — запуск после загрузки системы.
- Manual — ручной запуск.
- Disabled — отключенный.
Допустим, что у нас есть какая-то проблема в операционной системе и мы хотим проверить все сервисы, который автоматически запускаются при включении ОС. Для этого нам нужно использовать несколько условий, где статус не равен Running и тип запуска равен Automatic:
Get-Service | where -FilterScript {$_.Status -ne ‘Running’ -and $_.StartType -eq ‘Automatic’} | ft ‘Name’,’StartType’,’Status’
Службы могут быть зависимы от других и для проверки этих свойств есть два параметра:
- DependentServices — кто зависит от этого сервиса.
- RequiredServices — от кого зависит этот сервис.
Get-Service -DisplayName ‘Windows Remote Management (WS-Management)’ -RequiredServices -DependentServices
Аналогично параметрам команды выше есть свойства DependentServices и ServicesDependedOn (RequiredServices). Они выводят одно и то же.
Есть несколько свойств, которые не выведены в параметры — это:
- CanPauseAndContinue — можно ли приостановить работу сервиса и возобновить.
- CanShutdown — может ли быть выключен.
- CanStop — может ли быть полностью остановлен.
Эти свойства так же можно увидеть в GUI. В командлете ниже я использую алиас gsv (короткое имя Get-Service):
gsv -ServiceName ‘Winrm’ | SELECT CanPauseAndContinue,CanShutdown,CanStop | fl
Каждая команда PS, где присутствует параметр ComuterName, может быть выполнена удаленно. Для удаленного управления в Powershell нужны дополнительные настройки, которые уже описывались в предыдущей статье.
Имена всех компьютеров, с которых мы хотим получить имена сервисов, можно указать через запятую:
gsv -ComputerName ‘AD1′,’localhost’ | where Status -eq ‘Stopped’ | Select MachineName,Name,Status,StartType
Источник: http://fixmypc.ru/post/poluchenie-spiska-i-zapusk-sluzhb-powershell-service-i-upravlenie/
WSH Remote Scripting
Да, как ни странно у Windows Script Host тоже есть возможность запуска сценариев на других компьютерах. Правда эта функция не получила большой популярности, и скорее всего из-за того что требует слишком много подготовительных мероприятий, а взамен предоставляет совсем немного возможностей. Но я все равно расскажу об этом методе, так как и он может пригодиться.
Итак, для запуска сценария на другом компьютере с помощью WSH нам понадобится сделать следующее:
-
Права администратора на удалённом компьютере. Это само собой разумеется, и требуется почти для всех остальных методов запуска перечисленных в этой статье.
-
Разрешить WSH Remote Scripting создав в системном реестре строковой параметр Remote равный «1» в ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings
-
Из за ошибки описанной в статье базы знаний Microsoft с номером 311269, на системах с Windows XP может понадобиться выполнить команду wscript –regserver
-
Если на компьютерах используется брандмауэр, то в нём необходимо разрешить обращения к DCOM. Причем сделать это надо не только на управляемом компьютере, но и на том с которого вы хотите запускать сценарий.
-
В системах Windows XP с пакетом обновлений 2 и выше, необходимо изменить параметры безопасности DCOM. Это можно сделать с помощью групповой политики. В узле Computer Configuration Windows Settings Security Settings Local Policies Security Options следует установить разрешения следующим образом:
-
DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax
Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access -
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
-
Ну и после всех этих процедур, можно попробовать запустить свой сценарий на другом компьютере.
Пример сценария, который использует эту технологию:
Источник: http://setiwik.ru/vypolnit-komandu-na-udaljonnom-pk/
Изменение с Set-Service
Командлетом ниже я изменил тип запуска сервиса с отключенного на автоматический:
Set-Service ‘WinRM’ -StartupType Automatic
В случае изменения сервисов нельзя использовать маски *.
В документации Microsoft говориться про возможность изменения на четыре режима со следующими названиями:
- Automatic
- AutomaticDelayedStart
- Disabled
- Manual
Во первых половина называется иначе и изменение не срабатывает. Возможно изменение не срабатывает из-за багов Windows Server 2019,может из-за зависимостей (в GUI все работает), но скорее всего дело в PS. При работе с WMI все срабатывает. Реальные варианты запуска такие:
- Automatic
- Boot
- Disabled
- Manual
- System
Через эту команду можно так же выполнить запуск и остановку:
Set-Service ‘WinRM’ -Status Stopped
Все возможные значения:
- Paused
- Running
- Stopped
Можно изменить описание сервиса:
Set-Service ‘WinRM’ -Description ‘что вы сделали с PS’
Команды изменения можно выполнять удаленно:
Set-Service WinRM -ComputerName ‘AD1’ -StartupType Automatic
Источник: http://fixmypc.ru/post/poluchenie-spiska-i-zapusk-sluzhb-powershell-service-i-upravlenie/
Листинг №3 – Установка программы с последующим удалением задания (Windows Batch)
msiexec /qn /package \serversharesubinacl.msi
if exist «c:program filesWindows Resource KitsToolssubinacl.exe» (
subinacl /tn Install_Subinacl /f
)
Источник: http://setiwik.ru/vypolnit-komandu-na-udaljonnom-pk/