РАЗДЕЛ
about_Remote_FAQ
КРАТКОЕ ОПИСАНИЕ
Содержит вопросы о выполнении удаленных команд в Windows
PowerShell и ответы на них.
ПОЛНОЕ ОПИСАНИЕ
При удаленной работе команды вводятся в Windows PowerShell на
одном компьютере (который называется "локальным компьютером"),
но выполняются на другом компьютере (который называется "удаленным
компьютером). Удаленная работа должна быть максимально похожа на
непосредственную работу на удаленном компьютере.
Примечание. Для использования удаленного взаимодействия Windows
PowerShell удаленный компьютер должен быть настроен
на удаленное взаимодействие. Дополнительные сведения
см. в разделе about_Remote_Requirements.
ДОЛЖНА ЛИ ОБОЛОЧКА WINDOWS POWERSHELL БЫТЬ УСТАНОВЛЕНА НА ОБОИХ
КОМПЬЮТЕРАХ?
Да. Для удаленной работы на локальном и удаленном компьютерах
должны быть установлены следующие компоненты: Windows PowerShell,
Microsoft .NET Framework 2.0 и протокол WS-Management. Все файлы
и другие ресурсы, необходимые для выполнения конкретной команды,
должны находиться на удаленном компьютере.
Пользователю необходимо располагать разрешением на подключение
к удаленному компьютеру, разрешением на запуск Windows PowerShell,
а также разрешением на доступ к хранилищам данных (таким как файлы
и папки) и реестру на удаленном компьютере.
Дополнительные сведения см. в разделе about_Remote_Requirements.
КАК РАБОТАЕТ УДАЛЕННОЕ ВЗАИМДЕЙСТВИЕ?
При запуске удаленная команда передается по сети обработчику
Windows PowerShell на удаленном компьютере и запускает клиент
Windows PowerShell на удаленном компьютере.
Результаты выполнения команды передаются обратно на локальный
компьютер и отображаются в сеансе Windows PowerShell на локальном
компьютере.
Для передачи команд и получения выходных данных Windows PowerShell
использует протокол WS-Management. Дополнительные сведения об этом
протоколе см. в разделе "Протокол WS-Management" библиотеки MSDN
по адресу https://go.microsoft.com/fwlink/?LinkId=144634.
ЯВЛЯЕТСЯ ЛИ УДАЛЕННОЕ ВЗАИМОДЕЙСТВИЕ WINDOWS POWERSHELL БЕЗОПАСНЫМ?
При подключении к удаленному компьютеру система использует
учетные данные (имя пользователя и пароль) на локальном
компьютере или учетные данные, переданные в команде, для входа
в систему на удаленном компьютере. Учетные данные и остальные
передаваемые данные шифруются.
Для дополнительной защиты можно настроить удаленный компьютер
на использование протокола SSL вместо протокола HTTP, чтобы
прослушивать запросы удаленного управления Windows (WinRM).
После этого пользователи смогут использовать параметры UseSSL
командлетов Invoke-Command, New-PSSession и Enter-PSSession при
установлении подключения. Этот параметр позволяет использовать
HTTPS-канал, который является более защищенным по сравнению с
HTTP-каналом.
УДАЛЕННОЕ ВЗАИМОДЕЙСТВИЕ WINDOWS POWERSHELL ТРЕБУЕТСЯ ДЛЯ ВСЕХ КОМАНД?
Нет. Некоторые командлеты имеют параметр ComputerName, который
позволяет получать объекты удаленного компьютера.
Эти командлеты не используют удаленное взаимодействие Windows
PowerShell. Таким образом, их можно использовать на любом
компьютере с запущенной оболочкой Windows PowerShell, даже если
компьютер не настроен на удаленное взаимодействие Windows
PowerShell или не соответствует требованиям для удаленного
взаимодействия Windows PowerShell.
К таким командлетам относятся следующие:
Get-Process
Get-Service
Get-WinEvent
Get-EventLog
Get-WmiObject
Test-Connection
Чтобы найти все командлеты с параметром ComputerName, введите
следующую команду:
get-help * -parameter ComputerName
Чтобы определить, требуется ли для параметра ComputerName
конкретного командлета удаленное взаимодействие Windows
PowerShell, см. описание параметра. Для отображения описания
параметра введите следующую команду:
get-help <имя_командлета> -parameter ComputerName
Пример:
get-help get-process -parameter Computername
Для всех остальных команд используйте командлет Invoke-Command.
КАК ВЫПОЛНИТЬ КОМАНДУ НА УДАЛЕННОМ КОМПЬЮТЕРЕ?
Чтобы выполнить команду на удаленном компьютере, используйте
командлет Invoke-Command.
Чтобы представить команду в виде блока скрипта, заключите ее в
фигурные скобки ( {} ). Для указания команды используйте параметр
ScriptBlock командлета Invoke-Command.
Параметр ComputerName командлета Invoke-Command можно использовать
для указания удаленного компьютера. Кроме того, можно создать
постоянное подключение к удаленному компьютеру (сеанс) и
использовать параметр Session командлета Invoke-Command для
выполнения команды в сеансе.
Например, следующие команды позволяют удаленно выполнить команду
Get-Process.
invoke-command -computername Server01, Server02 -scriptblock
{get-process}
- ИЛИ -
invoke-command -session $s -scriptblock {get-process}
Чтобы прервать выполнение удаленной команды, нажмите сочетание
клавиш CTRL+C. Запрос прерывания передается на удаленный компьютер
и завершает работу команды.
Дополнительные сведения об удаленных командах см. в разделе
about_Remote и разделах справки для командлетов, поддерживающих
удаленное взаимодействие.
МОЖНО ЛИ ДЛЯ ДОСТУПА К УДАЛЕННОМУ КОМПЬЮТЕРУ ИСПОЛЬЗОВАТЬ ПРОТОКОЛ,
ПОДОБНЫЙ TELNET?
Чтобы начать интерактивный сеанс с удаленным компьютером, можно
использовать командлет Enter-PSSession.
В командной строке Windows PowerShell введите следующую команду:
Enter-PSSession <имя_компьютера>
Командная строка изменяется, чтобы указать, что установлено
подключение к удаленному компьютеру.
<имя_компьютера>\C:>
Теперь вводимые команды выполняются на удаленном компьютере, как
будто они вводятся непосредственно на нем.
Чтобы завершить интерактивный сеанс, введите следующую команду:
Exit-PSSession
Интерактивный сеанс - это постоянный сеанс, использующий протокол
WS-Management. Последний отличается от протокола Telnet, но
предоставляет аналогичную функциональность.
Дополнительные сведения см. в описании командлета Enter-PSSession.
МОЖНО ЛИ СОЗДАТЬ ПОСТОЯННОЕ ПОДКЛЮЧЕНИЕ?
Да. Удаленные команды можно выполнять, указывая имя удаленного
компьютера, его имя NetBIOS или его IP-адрес. Кроме того,
удаленные команды можно выполнять, указывая сеанс Windows
PowerShell (PSSession), подключенный к удаленному компьютеру.
При использовании параметра ComputerName командлета
Invoke-Command или Enter-PSSession оболочка Windows PowerShell
устанавливает временное подключение. Windows PowerShell
использует это подключение только для выполнения текущей команды,
а затем закрывает его. Это очень эффективный способ выполнения
одной команды или нескольких несвязанных команд даже на большом
количестве удаленных компьютеров.
При использовании командлета New-PSSession для создания сеанса
PSSession оболочка Windows PowerShell устанавливает постоянное
подключение для сеанса PSSession. После этого в сеансе PSSession
можно выполнить несколько команд, включая команды, которые
совместно используют данные.
Как правило, сеанс PSSession создают для выполнения
последовательности связанных команд, которые совместно используют
данные. В других случаях для большинства команд достаточно
создать временное подключение с помощью параметра ComputerName.
Дополнительные сведения о сеансах см. в разделе about_PSSessions.
МОЖНО ЛИ ВЫПОЛНЯТЬ КОМАНДЫ ОДНОВРЕМЕННО НА НЕСКОЛЬКИХ КОМПЬЮТЕРАХ?
Да. Параметр ComputerName командлета Invoke-Command принимает
несколько имен компьютеров, а параметр Session - несколько сеансов
PSSession.
При запуске команды Invoke-Command оболочка Windows PowerShell
выполняет команды на всех указанных компьютерах или во всех
указанных сеансах PSSession.
Windows PowerShell может одновременно управлять сотнями удаленных
подключений. Однако количество удаленных команд, которые можно
передать, может ограничиваться ресурсами локального компьютера
и его возможностью устанавливать и поддерживать несколько сетевых
подключений.
Дополнительные сведения см. в примере в разделе справки для
командлета Invoke-Command.
ГДЕ ХРАНЯТСЯ МОИ ПРОФИЛИ?
Профили Windows PowerShell не запускаются автоматически в
удаленных сеансах, поэтому команды, добавляемые профилем,
отсутствуют в сеансе. Кроме того, автоматическая переменная
$profile не заполняется в удаленных сеансах.
Чтобы запустить профиль в сеансе, используйте командлет
Invoke-Command.
Например, следующая команда запускает профиль CurrentUserCurrentHo
st с локального компьютера в сеансе в $s.
invoke-command -session $s -filepath $profile
Следующая команда запускает профиль CurrentUserCurrentHost с
удаленного компьютера в сеансе в $s. Так как переменная $profile
не заполнена, команда использует явный путь к профилю.
invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}
После выполнения этой команды все команды, добавляемые профилем
в сеанс, доступны в $s.
Кроме того, можно использовать скрипт запуска в конфигурации
сеанса для запуска профиля в каждом удаленном сеансе, который
использует эту конфигурацию сеанса.
Дополнительные сведения о профилях Windows PowerShell см в
разделе about_Profiles. Дополнительные сведения о конфигурациях
сеансов см. в разделе Register-PSSessionConfiguration.
КАК РАБОТАЕТ ФУНКЦИЯ РЕГУЛИРОВАНИЯ ДЛЯ УДАЛЕННЫХ КОМАНД?
Для упрощения управления ресурсами на локальном компьютере в
оболочке Windows PowerShell предусмотрена функция регулирования,
которая позволяет ограничить количество одновременных удаленных
подключений, устанавливаемых для каждой команды.
Количество одновременных подключений по умолчанию составляет 32,
однако с помощью параметров ThrottleLimit для конкретных команд
можно задать пользовательский предел регулирования.
При использовании функции регулирования следует помнить, что она
применяется к каждой команде, а не ко всему сеансу или компьютеру.
При одновременном выполнении команд в нескольких обычных сеансах
или сеансах PSSession количество одновременных подключений
определяется как сумма одновременных подключений во всех сеансах.
Чтобы найти командлеты с параметром ThrottleLimit, введите
следующую команду:
get-help * -parameter ThrottleLimit
КАКИЕ ХАРАКТЕРНЫЕ ДЛЯ СИСТЕМЫ РАЗЛИЧИЯ СЛЕДУЕТ УЧИТЫВАТЬ ПРИ
УДАЛЕННОМ ВЗАИМОДЕЙСТВИИ?
При выполнении команд на нескольких компьютерах следует учитывать
различия в операционных системах, структуре файловой системы и реестре.
При подключении к удаленному компьютеру под управлением Windows
Vista или Windows Server 2003 начальным местоположением по
умолчанию является домашний каталог текущего пользователя, который
хранится в переменной среды %homepath% ($env:homepath) и
переменной Windows PowerShell $home. В Windows Vista домашним
каталогом, как правило, является C:\Users\<имя_пользователя>.
В Windows Server 2003 домашним каталогом, как правило, является
C:\Documents and Settings\<имя_пользователя>.
При подключении к удаленному компьютеру под управлением Windows XP
начальным местоположением по умолчанию является домашний каталог
пользователя по умолчанию, который хранится в переменной среды
%homepath% ($env:homepath) для пользователя по умолчанию. Домашним
каталогом, как правило, является C:\Documents and Setting\Default User.
ОТЛИЧАЮТСЯ ЛИ ВЫХОДНЫЕ ДАННЫЕ УДАЛЕННЫХ КОМАНД ОТ ЛОКАЛЬНЫХ ВЫХОДНЫХ
ДАННЫХ?
При локальном использовании Windows PowerShell пользователь
передает и получает "активные" объекты .NET Framework; "активные"
объекты - это объекты, связанные с фактическими программами или
системными компонентами. При вызове методов или изменении свойств
активных объектов изменения воздействуют на фактическую программу
или компонент. Если изменяются свойства программы или компонента,
свойства представляющих их объектов также изменяются.
Однако поскольку большинство активных объектов невозможно передать
по сети, Windows PowerShell "сериализует" большинство объектов,
передаваемых в удаленных командах, т. е. выполняет преобразование
каждого объекта в набор XML-элементов для передачи.
Когда оболочка Windows PowerShell получает сериализованный объект,
она преобразует XML-данные в десериализованный объект.
Десериализованный объект представляет собой запись свойств
программы или компонента, являющуюся точной для момента времени,
предшествующего текущему, но эта запись не является "активной",
т. е. она больше не связана с компонентом. Методы удаляются,
поскольку они больше не являются действенными.
Как правило, десериализованные объекты можно использовать так же,
как активные, но при этом необходимо помнить об их ограничениях.
Кроме того, объекты, возвращаемые командлетом Invoke-Command,
имеют дополнительные свойства, которые позволяют определить
происхождение команды.
Некоторые объекты, такие как DirectoryInfo и GUID, при получении
преобразуются обратно в активные объекты. Для этих объектов не
требуется какая-либо специальная обработка или форматирование.
Дополнительные сведения об интерпретации и форматировании выходных
данных удаленных команд см. в разделе about_Remote_Output.
МОЖНО ЛИ УДАЛЕННО ВЫПОЛНЯТЬ ФОНОВЫЕ ЗАДАНИЯ?
Да. Фоновое задание Windows PowerShell - это команда Windows
PowerShell, которая выполняется асинхронно без взаимодействия
с сеансом. При запуске фонового задания командная строка
отображается мгновенно, что позволяет продолжить работу в сеансе
во время выполнения фонового задания, даже если для его завершения
требуется длительное время.
Фоновое задание можно запустить даже во время выполнения других
команд, поскольку оно всегда выполняется асинхронно во временном
сеансе.
Выполнять фоновые задания можно как на локальном, так и на
удаленном компьютере. По умолчанию фоновое задание выполняется на
локальном компьютере. Однако можно использовать параметр AsJob
командлета Invoke-Command для выполнения любой удаленной команды
в качестве фонового задания. Кроме того, командлет Invoke-Command
можно использовать для удаленного выполнения команды Start-Job.
Дополнительные сведения о фоновых заданиях в Windows PowerShell
см. в разделах "about_Jobs" и "about_Remote_Jobs".
МОЖНО ЛИ ЗАПУСКАТЬ ПРОГРАММЫ WINDOWS НА УДАЛЕННОМ КОМПЬЮТЕРЕ?
Удаленные команды Windows PowerShell можно использовать для
запуска программ Windows на удаленных компьютерах. Например,
можно запустить программу Shutdown.exe или Ipconfig на удаленном
компьютере.
Однако команды Windows PowerShell нельзя использовать, чтобы
открыть пользовательский интерфейс для какой-либо программы на
удаленном компьютере.
При запуске программы Windows на удаленном компьютере команда не
завершается и командная строка не отображается, пока программа не
завершится или не будет прервана пользователем с помощью
сочетания клавиш CTRL+C. Например, после запуска программы
IpConfig на удаленном компьютере командная строка отображается
только после завершения работы IpConfig.
При использовании удаленных команд для запуска программы с
пользовательским интерфейсом процесс программы запускается,
но пользовательский интерфейс не отображается. Команда Windows
PowerShell не завершается и командная строка не отображается,
пока процесс программы не будет остановлен или не будет прерван
пользователем с помощью сочетания клавиш CTRL+C.
Например, при использовании команды Windows PowerShell для
запуска программы "Блокнот" на удаленном компьютере процесс
Notepad запускается на удаленном компьютере, но пользовательский
интерфейс программы не отображается. Для прерывания команды и
отображения командной строки нажмите сочетание клавиш CTRL+C.
МОЖНО ЛИ ОГРАНИЧИТЬ НАБОР КОМАНД, КОТОРЫЕ ПОЛЬЗОВАТЕЛИ МОГУТ
ВЫПОЛНЯТЬ НА МОЕМ КОМПЬЮТЕРЕ?
Да. Каждый удаленный сеанс должен использовать одну из
конфигураций сеанса на удаленном компьютере. Можно управлять
конфигурациями сеансов (и разрешениями на использование этих
конфигураций) на своем компьютере для определения пользователей,
которые могут выполнять на нем удаленные команды, а также набора
доступных для выполнения команд.
Конфигурация сеанса используется для настройки среды для сеанса.
Конфигурацию можно определить с помощью сборки, реализующей новый
класс конфигурации, или скрипта, выполняющегося в сеансе.
Конфигурация может определять команды, доступные в сеансе. Кроме
того, конфигурация может включать параметры для защиты
компьютера, например параметры, ограничивающие объем данных,
принимаемых сеансом удаленно в одном объекте или команде. Также
можно задать дескриптор безопасности, определяющий разрешения,
необходимые для использования конфигурации.
Командлет Enable-PSRemoting создает конфигурацию сеанса по
умолчанию на текущем компьютере, Microsoft.PowerShell (и
Microsoft.PowerShell32 в 64-разрядных операционных системах).
Командлет Enable-PSRemoting задает дескриптор безопасности для
конфигурации, позволяющий использовать ее только членам группы
"Администраторы" на текущем компьютере.
Командлеты для работы с конфигурациями сеансов можно использовать
для изменения конфигураций сеансов по умолчанию, создания новых
конфигураций сеансов и изменения дескрипторов безопасности всех
конфигураций сеансов.
При применении командлетов Invoke-Command, New-PSSession или
Enter-PSSession можно использовать параметр ConfigurationName,
чтобы указать конфигурацию сеанса для данного сеанса. Кроме того,
можно изменить конфигурацию по умолчанию, используемую сеансами,
путем изменения значения привилегированной переменной
$PSSessionConfigurationName в сеансе.
Дополнительные сведения о конфигурациях сеансов см. в разделах
справки по командлетам для работы с конфигурациями сеансов. Чтобы
найти командлеты для работы с конфигурациями сеансов, введите
следующую команду:
get-command *pssessionconfiguration
ЧТО ПРЕДСТАВЛЯЮТ СОБОЙ КОНФИГУРАЦИИ СХОЖДЕНИЯ И РАЗВЕТВЛЕНИЯ?
В наиболее распространенном сценарии удаленного взаимодействия
Windows PowerShell, включающем несколько компьютеров, используется
конфигурация "один ко многим", в которой один локальный компьютер
(компьютер администратора) выполняет команды Windows PowerShell на
нескольких удаленных компьютерах. Такая конфигурация называется
конфигурацией "разветвления".
Однако в некоторых компаниях используется конфигурация "многие к
одному", в которой несколько клиентских компьютеров подключаются
к одному удаленному компьютеру (например, файловому серверу или
киоску) с запущенной оболочкой Windows PowerShell.
Такая конфигурация называется конфигурацией "схождения".
Удаленное взаимодействие Windows PowerShell поддерживает как
конфигурации разветвления, так и конфигурации схождения.
В случае конфигурации разветвления Windows PowerShell использует
протокол WS-Management и службу WinRM, поддерживающую выполненную
Майкрософт реализацию протокола WS-Management. При подключении
локального компьютера к удаленному компьютеру протокол
WS-Management устанавливает соединение и использует подключаемый
модуль для Windows PowerShell, чтобы запустить хост-процесс
Windows PowerShell (Wsmprovhost.exe) на удаленном компьютере.
Пользователь может задать альтернативный порт, альтернативную
конфигурацию сеанса и другие функции для настройки удаленного
подключения.
С целью поддержки конфигурации "схождения" Windows PowerShell
использует службы IIS для размещения WS-Management, загрузки
подключаемого модуля Windows PowerShell и запуска Windows
PowerShell. В этом сценарии вместо запуска каждого сеанса Windows
PowerShell в отдельном процессе все сеансы Windows PowerShell
выполняются в одном хост-процессе.
IIS-размещение и удаленное управление в конфигурации схождения не
поддерживается в Windows XP и Windows Server 2003.
В конфигурации схождения пользователь может указать URI
подключения и конечную точку HTTP, включая транспорт, имя
компьютера, порт и имя приложения. Службы IIS перенаправляют все
запросы с указанным именем приложения соответствующему приложению.
По умолчанию используется протокол WS-Management, который может
размещать Windows PowerShell.
Кроме того, можно указать механизм проверки подлинности и
запретить или разрешить перенаправление из конечных точек HTTP
и HTTPS.
МОЖНО ЛИ ПРОТЕСТИРОВАТЬ УДАЛЕННОЕ ВЗАИМОДЕЙСТВИЕ НА ОДНОМ КОМПЬЮТЕРЕ
(НЕ В ДОМЕНЕ)?
Да. Удаленное взаимодействие Windows PowerShell доступно, даже
если компьютер не входит в домен. Функции удаленного
взаимодействия можно использовать для подключения к сеансам и
создания сеансов на одном и том же компьютере. Функции работают
так же, как при подключении к удаленному компьютеру.
Для выполнения удаленных команд на компьютере в рабочей группе
измените следующие параметры Windows на компьютере.
Внимание! Эти параметры воздействуют на всех пользователей
системы и могут сделать ее более уязвимой к атакам злоумышленников.
Будьте осмотрительны при изменении этих параметров.
-- Windows XP с пакетом обновления 2 (SP2):
Используйте локальные параметры безопасности (Secpol.msc) для
изменения значения политики "Сетевой доступ: модель
совместного доступа и безопасности для локальных учетных
записей" в Security Settings\Local Policies\Security Options
на "Классическая".
-- Windows Vista:
Создайте следующую запись реестра и задайте для нее значение 1:
LocalAccountTokenFilterPolicy в
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Для добавления этой записи можно использовать следующую
команду Windows PowerShell:
new-itemproperty `
-path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System `
-name LocalAccountTokenFilterPolicy -propertyType DWord -value 1
-- Windows°2003:
Выполнять изменения не требуется, поскольку для политики
"Сетевой доступ: модель совместного доступа и безопасности
для локальных учетных записей" задано значение "Классическая".
Проверьте значение, чтобы убедиться, что оно не изменялось.
МОЖНО ЛИ ВЫПОЛНЯТЬ УДАЛЕННЫЕ КОМАНДЫ НА КОМПЬЮТЕРЕ В ДРУГОМ ДОМЕНЕ?
Да. Как правило, команды выполняются без ошибок, хотя может
потребоваться использовать параметр Credential командлетов
Invoke-Command, New-PSSession или Enter-PSSession для
предоставления учетных данных члена группы "Администраторы" на
удаленном компьютере. Иногда это требуется, даже если текущий
пользователь является членом группы "Администраторы" на локальном
и удаленном компьютерах.
Однако если удаленный компьютер не входит в домен, которому
доверяет локальный компьютер, удаленный компьютер может оказаться
неспособным выполнить проверку подлинности учетных данных
пользователя.
Чтобы включить проверку подлинности, используйте следующую
команду для добавления удаленного компьютера в список доверенных
узлов локального компьютера в WinRM.
Введите команду в командной строке Windows PowerShell.
set-item WSMan:\localhost\Client\TrustedHosts -value <имя_удаленного_компьютера>
Например, чтобы добавить компьютер Server01 в список доверенных
узлов на локальном компьютере, введите следующую команду в
командной строке Windows PowerShell:
set-item WSMan:\localhost\Client\TrustedHosts -value Server01
СМ. ТАКЖЕ
about_Remote
about_Profiles
about_PSSessions
about_Remote_Jobs
Invoke-Command
New-PSSession