РАЗДЕЛ 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