Powershell подключиться к другому компьютеру: Вопросы и ответы об удаленном взаимодействии PowerShell — PowerShell
Содержание
Вопросы и ответы об удаленном взаимодействии PowerShell — PowerShell
Изменить
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Вопросы и ответы -
При удаленной работе вы вводите команды в PowerShell на одном компьютере (известном как «локальный компьютер»), но команды выполняются на другом компьютере (известном как «удаленный компьютер»). Работа в удаленном режиме должна быть как можно больше похожа на работу непосредственно на удаленном компьютере.
Примечание
Чтобы использовать удаленное взаимодействие PowerShell, удаленный компьютер должен быть настроен для удаленного взаимодействия. Дополнительные сведения см. в разделе about_Remote_Requirements.
Да. Для удаленной работы локальные и удаленные компьютеры должны иметь PowerShell, microsoft платформа .NET Framework и протокол веб-служб для управления (WS-Management). Все файлы и другие ресурсы, необходимые для выполнения определенной команды, должны находиться на удаленном компьютере.
Компьютеры под управлением Windows PowerShell 3.0 и компьютеры под управлением Windows PowerShell 2.0 могут удаленно подключаться друг к другу и выполнять удаленные команды. Однако некоторые функции, такие как возможность отключиться от сеанса и повторно подключиться к нему, работают только в том случае, если оба компьютера работают под управлением Windows PowerShell 3. 0.
Необходимо иметь разрешение на подключение к удаленному компьютеру, разрешение на запуск PowerShell и разрешение на доступ к хранилищам данных (например, файлам и папкам) и реестру на удаленном компьютере.
Дополнительные сведения см. в разделе about_Remote_Requirements.
При отправке удаленной команды команда передается по сети в подсистему PowerShell на удаленном компьютере и выполняется в клиенте PowerShell на удаленном компьютере. Результаты команды отправляются обратно на локальный компьютер и отображаются в сеансе PowerShell на локальном компьютере.
Для передачи команд и получения выходных данных PowerShell использует протокол WS-Management. Сведения о протоколе WS-Management см. в разделе Протокол WS-Management в документации Windows.
Начиная с Windows PowerShell 3.0 удаленные сеансы хранятся на удаленном компьютере.
Это позволяет отключиться от сеанса и повторно подключиться к другому сеансу или другому компьютеру без прерывания выполнения команд или потери состояния.
При подключении к удаленному компьютеру система использует учетные данные имени пользователя и пароля на локальном компьютере или учетные данные, которые вы указали в команде для входа на удаленный компьютер. Учетные данные и остальная часть передачи шифруются.
Чтобы добавить дополнительную защиту, можно настроить на удаленном компьютере использование ssl вместо HTTP для прослушивания запросов удаленного управления Windows (WinRM).
Затем при установке подключения пользователи могут использовать параметр Invoke-Command
UseSSL командлетов , New-PSSession
и Enter-PSSession
. Этот параметр использует более безопасный канал HTTPS вместо HTTP.
Нет. Некоторые командлеты имеют параметр ComputerName , который позволяет получать объекты с удаленного компьютера.
Эти командлеты не используют удаленное взаимодействие PowerShell. Таким образом, их можно использовать на любом компьютере под управлением PowerShell, даже если компьютер не настроен для удаленного взаимодействия PowerShell или если компьютер не соответствует требованиям к удаленному взаимодействию PowerShell.
К этим командлетам относятся следующие:
Get-Hotfix
Rename-Computer
Restart-Computer
Stop-Computer
Чтобы найти все командлеты с параметром ComputerName , введите:
Get-Help * -Parameter ComputerName # or Get-Command -ParameterName ComputerName
Чтобы определить, требуется ли удаленное взаимодействие PowerShell для параметра ComputerName определенного командлета, см. описание параметра. Чтобы отобразить описание параметра, введите:
Get-Help <cmdlet-name> -Parameter ComputerName
Пример:
Get-Help Get-Hotfix -Parameter ComputerName
Для всех остальных команд используйте Invoke-Command
командлет .
Чтобы выполнить команду на удаленном компьютере, используйте Invoke-Command
командлет .
Заключите команду в фигурные скобки ({}
), чтобы сделать ее блоком скрипта. Используйте параметр ScriptBlock , Invoke-Command
чтобы указать команду .
Чтобы указать удаленный компьютер, можно использовать параметр Invoke-Command
ComputerName . Кроме того, можно создать постоянное подключение к удаленному компьютеру (сеансу), а затем использовать параметр Invoke-Command
Session для выполнения команды в сеансе.
Например, следующие команды выполняются Get-Process
удаленно.
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process} # - OR - Invoke-Command -Session $s -ScriptBlock {Get-Process}
Чтобы прервать удаленную команду, введите CTRL+C. Запрос прерывания передается на удаленный компьютер, где завершается удаленная команда.
Дополнительные сведения об удаленных командах см. в about_Remote и разделах справки по командлетам, поддерживающим удаленное взаимодействие.
Командлет можно использовать для Enter-PSSession
запуска интерактивного сеанса с удаленным компьютером.
В командной строке PowerShell введите следующее:
Enter-PSSession <ComputerName>
В командной строке появится сообщение о том, что вы подключены к удаленному компьютеру.
<ComputerName>\C:>
Теперь введенные вами команды выполняются на удаленном компьютере так же, как если бы вы ввели их непосредственно на удаленном компьютере.
Чтобы завершить интерактивный сеанс, введите:
Exit-PSSession
Интерактивный сеанс — это постоянный сеанс, использующий протокол WS-Management. Это не то же самое, что использование Telnet, но оно обеспечивает аналогичные возможности.
Для получения дополнительной информации см. Enter-PSSession
.
Да. Удаленные команды можно выполнить, указав имя удаленного компьютера, его NetBIOS-имя или IP-адрес. Кроме того, можно выполнить удаленные команды, указав сеанс PowerShell (PSSession), подключенный к удаленному компьютеру.
При использовании параметра ComputerName или Invoke-Command
Enter-PSSession
PowerShell устанавливает временное подключение. PowerShell использует подключение для выполнения только текущей команды, а затем закрывает подключение. Это очень эффективный метод для выполнения одной команды или нескольких несвязанных команд, даже на многих удаленных компьютерах.
При использовании командлета New-PSSession
для создания PSSession PowerShell устанавливает постоянное подключение для PSSession. Затем можно выполнить несколько команд в PSSession, включая команды, которые совместно используют данные.
Как правило, psSession создается для выполнения ряда связанных команд, которые совместно используют данные.
В противном случае для большинства команд достаточно временного подключения, созданного параметром ComputerName .
Дополнительные сведения о сеансах см. в разделе about_PSSessions.
Да. Параметр ComputerName командлета Invoke-Command
принимает несколько имен компьютеров, а параметр Session принимает несколько PSSessions.
При выполнении Invoke-Command
команды PowerShell выполняет команды на всех указанных компьютерах или во всех указанных PSSessions.
PowerShell может управлять сотнями параллельных удаленных подключений. Однако количество удаленных команд, которые можно отправить, может быть ограничено ресурсами компьютера и его емкостью для установки и обслуживания нескольких сетевых подключений.
Дополнительные сведения см. в примере в разделе справки Invoke-Command
.
Профили PowerShell не запускаются автоматически в удаленных сеансах, поэтому команды, добавленные профилем, отсутствуют в сеансе. Кроме того, $profile
автоматическая переменная не заполняется в удаленных сеансах.
Чтобы запустить профиль в сеансе, используйте Invoke-Command
командлет .
Например, следующая команда выполняет профиль CurrentUserCurrentHost с локального компьютера в сеансе в $s
.
Invoke-Command -Session $s -FilePath $profile
Следующая команда выполняет профиль CurrentUserCurrentHost с удаленного компьютера в сеансе в $s
. $profile
Так как переменная не заполнена, команда использует явный путь к профилю.
Invoke-Command -Session $s { . "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" }
После выполнения этой команды команды команды, добавленные профилем в сеанс, доступны в $s
.
Вы также можете использовать скрипт запуска в конфигурации сеанса, чтобы запустить профиль в каждом удаленном сеансе, в котором используется конфигурация сеанса.
Дополнительные сведения о профилях PowerShell см. в разделе about_Profiles. Дополнительные сведения о конфигурациях сеансов см. в разделе Register-PSSessionConfiguration
.
Чтобы упростить управление ресурсами на локальном компьютере, PowerShell включает функцию регулирования для каждой команды, которая позволяет ограничить количество параллельных удаленных подключений, установленных для каждой команды.
Значение по умолчанию — 32 одновременных подключения, но вы можете использовать параметр ThrottleLimit командлетов, чтобы задать пользовательское ограничение регулирования для определенных команд.
При использовании функции регулирования следует помнить, что она применяется к каждой команде, а не ко всему сеансу или компьютеру. Если команды выполняются параллельно в нескольких сеансах или сеансах PSSessions, количество одновременных подключений — это сумма одновременных подключений во всех сеансах.
Чтобы найти командлеты с параметром ThrottleLimit , введите:
Get-Help * -Parameter ThrottleLimit -or- Get-Command -ParameterName ThrottleLimit
При локальном использовании PowerShell вы отправляете и получаете «динамические» объекты платформа .NET Framework; «динамические» объекты — это объекты, связанные с фактическими программами или системными компонентами.
При вызове методов или изменении свойств динамических объектов изменения влияют на фактическую программу или компонент. При изменении свойств программы или компонента также изменяются свойства объекта, представляющего их.
Однако поскольку большинство динамических объектов не могут быть переданы по сети, PowerShell «сериализует» большинство объектов, отправленных в удаленных командах, то есть преобразует каждый объект в ряд элементов данных XML (язык ограничений в XML [CLiXML]) для передачи.
Когда PowerShell получает сериализованный объект, он преобразует XML-код в десериализованный тип объекта. Десериализованный объект является точной записью свойств программы или компонента в предыдущее время, но он больше не является «живым», то есть больше не связан напрямую с компонентом. Кроме того, методы удаляются, так как они больше не эффективны.
Как правило, десериализованные объекты можно использовать так же, как и динамические объекты, но необходимо учитывать их ограничения. Кроме того, объекты, возвращаемые командлетом Invoke-Command
, имеют дополнительные свойства, которые помогают определить источник команды.
Некоторые типы объектов, такие как объекты DirectoryInfo и GUID, преобразуются обратно в динамические объекты при их получении. Эти объекты не нуждаются в специальной обработке или форматировании.
Сведения о интерпретации и форматировании удаленных выходных данных см. в разделе about_Remote_Output.
Да. Фоновое задание PowerShell — это команда PowerShell, которая выполняется асинхронно без взаимодействия с сеансом. При запуске фонового задания командная строка возвращается немедленно, и вы можете продолжить работу в сеансе во время выполнения задания, даже если оно выполняется в течение длительного периода времени.
Фоновое задание можно запустить даже при выполнении других команд, так как фоновые задания всегда выполняются асинхронно во временном сеансе.
Фоновые задания можно выполнять на локальном или удаленном компьютере. По умолчанию фоновое задание выполняется на локальном компьютере. Однако можно использовать параметр AsJob командлета Invoke-Command
для выполнения любой удаленной команды в качестве фонового задания. Кроме того, можно использовать для Invoke-Command
удаленного Start-Job
выполнения команды.
Дополнительные сведения о фоновых заданиях в PowerShell см. в разделе about_Jobs и about_Remote_Jobs.
Удаленные команды PowerShell можно использовать для запуска программ windows на удаленных компьютерах.
Например, можно запустить Shutdown.exe
или Ipconfig.exe
на удаленном компьютере.
Однако нельзя использовать команды PowerShell для открытия пользовательского интерфейса для любой программы на удаленном компьютере.
При запуске программы Windows на удаленном компьютере команда не выполняется, и командная строка PowerShell не возвращается, пока программа не будет завершена или пока не будет выполнена команда нажатием клавиш CTRL+C , чтобы прервать выполнение команды. Например, если программа запускается Ipconfig.exe
на удаленном компьютере, командная строка не возвращается Ipconfig.exe
до завершения.
Если вы используете удаленные команды для запуска программы с пользовательским интерфейсом, процесс программы запускается, но пользовательский интерфейс не отображается. Команда PowerShell не завершена, и командная строка не возвращается, пока вы не остановите программный процесс или не нажмете клавиши CTRL+C, которая прервет команду и не остановит процесс.
Например, если вы используете команду PowerShell для запуска Notepad
на удаленном компьютере, процесс Блокнота запускается на удаленном компьютере, но пользовательский интерфейс Блокнота не отображается. Чтобы прервать выполнение команды и восстановить командную строку, нажмите клавиши CTRL+C.
Да. Каждый удаленный сеанс должен использовать одну из конфигураций сеанса на удаленном компьютере. Вы можете управлять конфигурациями сеансов на компьютере (и разрешениями для этих конфигураций сеансов), чтобы определить, кто может выполнять команды удаленно на компьютере и какие команды они могут выполнять.
Конфигурация сеанса настраивает среду для сеанса. Конфигурацию можно определить с помощью сборки, реализующей новый класс конфигурации, или с помощью скрипта, который выполняется в сеансе. Конфигурация может определять команды, доступные в сеансе. Кроме того, конфигурация может включать параметры, защищающие компьютер, например параметры, ограничивающие объем данных, которые сеанс может получать удаленно в одном объекте или команде. Можно также указать дескриптор безопасности, который определяет разрешения, необходимые для использования конфигурации.
Командлет Enable-PSRemoting
создает конфигурации сеанса по умолчанию на компьютере: Microsoft.PowerShell, Microsoft.PowerShell.Workflow и Microsoft.PowerShell32 (только 64-разрядные операционные системы). Enable-PSRemoting
задает дескриптор безопасности для конфигурации, разрешая использовать их только членам группы «Администраторы» на компьютере.
Командлеты конфигурации сеанса можно использовать для изменения конфигураций сеансов по умолчанию, для создания новых конфигураций сеансов и для изменения дескрипторов безопасности всех конфигураций сеансов.
Начиная с Windows PowerShell 3.0, New-PSSessionConfigurationFile
командлет позволяет создавать пользовательские конфигурации сеанса с помощью текстового файла. Файл содержит параметры для настройки языкового режима и указания командлетов и модулей, доступных в сеансах, использующих конфигурацию сеанса.
Когда пользователи Invoke-Command
используют командлеты , New-PSSession
или Enter-PSSession
, они могут использовать параметр ConfigurationName , чтобы указать конфигурацию сеанса, используемую для сеанса. Кроме того, они могут изменить конфигурацию по умолчанию, используемую их сеансами, изменив значение переменной $PSSessionConfigurationName
предпочтения в сеансе.
Дополнительные сведения о конфигурациях сеансов см. в справке по командлетам конфигурации сеанса. Чтобы найти командлеты конфигурации сеанса, введите:
Get-Command *PSSessionConfiguration
Наиболее распространенный сценарий удаленного взаимодействия PowerShell с несколькими компьютерами — это конфигурация «один ко многим», в которой один локальный компьютер (компьютер администратора) выполняет команды PowerShell на нескольких удаленных компьютерах. Это называется сценарием развертывания.
Однако на некоторых предприятиях используется конфигурация «многие к одному», при которой многие клиентские компьютеры подключаются к одному удаленному компьютеру под управлением PowerShell, например к файловму серверу или киоску. Это называется конфигурацией «вентилятора».
Удаленное взаимодействие PowerShell поддерживает конфигурации развертывания и развертывания.
Для развертывания конфигурации PowerShell использует протокол веб-служб для управления (WS-Management) и службу WinRM, которая поддерживает реализацию WS-Management майкрософт. Когда локальный компьютер подключается к удаленному компьютеру, WS-Management устанавливает подключение и использует подключаемый модуль для PowerShell для запуска хост-процесса PowerShell (Wsmprovhost.exe) на удаленном компьютере. Пользователь может указать альтернативный порт, конфигурацию альтернативного сеанса и другие функции для настройки удаленного подключения.
Для поддержки конфигурации «вентилятора» PowerShell использует службы IIS для размещения WS-Management, загрузки подключаемого модуля PowerShell и запуска PowerShell. В этом сценарии вместо запуска каждого сеанса PowerShell в отдельном процессе все сеансы PowerShell выполняются в одном хост-процессе.
Удаленное управление размещением и развертыванием IIS не поддерживается в Windows XP и Windows Server 2003.
В конфигурации развертывания пользователь может указать URI подключения и конечную точку HTTP, включая транспорт, имя компьютера, порт и имя приложения. IIS пересылает в приложение все запросы с указанным именем приложения. По умолчанию используется WS-Management, в котором может размещаться PowerShell.
Вы также можете указать механизм проверки подлинности и запретить или разрешить перенаправление с конечных точек HTTP и HTTPS.
Да. Удаленное взаимодействие PowerShell доступно, даже если локальный компьютер не входит в домен. Функции удаленного взаимодействия можно использовать для подключения к сеансам и создания сеансов на том же компьютере. Эти функции работают так же, как и при подключении к удаленному компьютеру.
Чтобы выполнить удаленные команды на компьютере в рабочей группе, измените следующие параметры Windows на компьютере.
Внимание! Эти параметры влияют на всех пользователей в системе и могут сделать систему более уязвимой для вредоносных атак. Соблюдайте осторожность при внесении этих изменений.
Windows Vista, Windows 7, Windows 8:
Создайте следующую запись реестра, а затем присвойте ей значение 1: LocalAccountTokenFilterPolicy в
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Для добавления этой записи можно использовать следующую команду PowerShell:
$parameters = @{ Path='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' Name='LocalAccountTokenFilterPolicy' propertyType='DWord' Value=1 } New-ItemProperty @parameters
Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2:
Изменения не требуются, так как по умолчанию для политики «Сетевой доступ: модель общего доступа и безопасности для локальных учетных записей» задано значение «Классическая». Проверьте параметр, если он был изменен.
Да. Как правило, команды выполняются без ошибок, хотя может потребоваться использовать параметр Invoke-Command
Credential командлетов , New-PSSession
или Enter-PSSession
, чтобы предоставить учетные данные члена группы администраторов на удаленном компьютере. Иногда это требуется, даже если текущий пользователь является членом группы «Администраторы» на локальном и удаленном компьютерах.
Однако если удаленный компьютер не входит в домен, которому он доверяет, удаленный компьютер может не пройти проверку подлинности учетных данных пользователя.
Чтобы включить проверку подлинности, используйте следующую команду, чтобы добавить удаленный компьютер в список доверенных узлов для локального компьютера в WinRM. Введите команду в командной строке PowerShell.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>
Например, чтобы добавить компьютер Server01 в список доверенных узлов на локальном компьютере, введите следующую команду в командной строке PowerShell:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value Server01
Да. Дополнительные сведения см. в статье Удаленное взаимодействие PowerShell по протоколу SSH.
См. также раздел
about_Remote
about_Profiles
about_PSSessions
about_Remote_Jobs
about_Remote_Variables
Invoke-Command
New-PSSession
Обратная связь
Просмотреть все отзывы по странице
PowerShell.
О удалённом подключении (about_Remote) — Клёвый код
С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.
В этом разделе приводится ряд примеров, показывающих, как работать с разными типами удаленных команд. Рекомендуется так же прочесть разделы справки, которые описывают каждый командлет, который используется в статье. Эта статья представляет подробную информацию и объясняет, как можно изменять команды под ваши потребности.
Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.
Как начать интерактивный сеанс (ENTER-PSSESSION)
Самый простой способ выполнять удаленные команды — это начать интерактивный сеанс с удаленным компьютером.
Когда начинается сессия, команды которые вы вводите, выполняются на удаленном компьютере, как если бы вы набрали их непосредственно на удаленном компьютере. Вы можете подключиться только к одному компьютеру в каждом интерактивном сеансе.
Чтобы начать интерактивный сеанс, используйте командлет Enter-PSSession.
Следующая команда начинает интерактивный сеанс с компьютером Server01:
PowerShell
Enter-PSSession Server01
| Enter-PSSession Server01 |
Командная строка изменяется, чтобы указать, что вы подключены к компьютеру Server01.
PowerShell
Server01 \ PS>
| Server01 \ PS> |
Теперь можно вводить команды на компьютере Server01.
Чтобы завершить интерактивный сеанс, надо ввести:
PowerShell
Exit-PSSession
| Exit-PSSession |
Для получения дополнительной информации см Enter-PSSession.
Как работать с командлетами, которые имеют параметр ComputerName для дистанционного получения данных
Некоторые командлеты имеют параметр ComputerName, он позволяет получать объекты с удаленных компьютеров.
Поскольку эти командлеты не используют WS-Management на базе Windows PowerShell Remoting, вы можете использовать параметр ComputerName этих командлетов на любом компьютере под управлением Windows PowerShell. Компьютеры могут быть не настроены для работы Windows PowerShell Remoting, и компьютеры могут не отвечать требованиям к системам для удаленного доступа.
Ниже приведён список командлетов имеющих параметр ComputerName:
Clear-EventLog
Get-Counter
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
Get-WmiObject
Limit-EventLog
New-EventLog
Remove-EventLog
Restart-Computer
Stop-Computer
Show-EventLog
Test-Connection
Write-EventLog
Для примера, следующая команда получает службы на удаленном компьютере Server01:
PowerShell
Get-Service -ComputerName Server01
| Get-Service -ComputerName Server01 |
Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:
PowerShell
Get-Command | where { $_.Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»}
| Get-Command | where { $_.Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»} |
Как запустить команды удалённо
Для запуска команд, не поддерживающих параметр ComputerName, на удаленных компьютерах. Можно использовать командлет Invoke-Command.
Для указания списка компьютеров или одного компьютера можно воспользоваться параметром ComputerName. Для задания одной или несколько команд надо воспользоваться парамертом ScriptBlock.
Например, следующая команда выполняет команду Get-Culture на компьютере Server01.
PowerShell
Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}
| Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture} |
Параметр ComputerName предназначен для ситуаций, в которых выполняется одна команда или несколько несвязанных команд, на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, надо использовать параметр Session.
Как создать постоянное соединение (PSsession)
При использовании параметра ComputerName и командлета Invoke-Command, оболочка Windows PowerShell устанавливает подключение только для данной команды. Затем, когда команда завершена, оболочка закрывает соединение. Любые переменные или функции, которые были определены в команде, будут потеряны.
Чтобы создать постоянное подключение к удаленному компьютеру, надо воспользоваться командлетом New-PSSession. Например, следующая команда создает сеансы PSSession на компьютерах Server01 и Server02, а затем сохраняет эти сеансы в переменной $s.
PowerShell
$s = New-PSSession -ComputerName Server01, Server02
| $s = New-PSSession -ComputerName Server01, Server02 |
Как выполнять команд в PSsession
Воспользовавшись PSSession, можно запустить серию удаленных команд, которые будут иметь одно общее окружение. И соответственно иметь общий доступ к таким данным, как функции, псевдонимы и значения переменных. Для запуска команды в PSSession, используется параметр Session в командлете Invoke-Command.
Например, следующая команда использует командлет Invoke-Command для выполнения командлета Get-Process в сеансах PSSession $s на компьютерах Server01 и Server02. Команда сохраняет процессы в переменной $р в каждом из сеансов PSSession.
PowerShell
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}
| Invoke-Command -Session $s -ScriptBlock {$p = Get-Process} |
Так как PSSession использует постоянное подключение, вы можете запустить другую команду в той же сессии PSSession, в которой уже задана переменная $р. Следующая команда подсчитывает количество процессов, сохраненных в переменной $р.
PowerShell
Invoke-Command -Session $s -ScriptBlock {$p.count}
| Invoke-Command -Session $s -ScriptBlock {$p. count} |
Как запустить удалённые команды на нескольких компьютерах
Для запуска удаленной команды на нескольких компьютерах, необходимо ввести все имена компьютеров в значении параметра ComputerName командлета Invoke-Command. Разделите имена компьютеров запятыми.
Например, следующая команда запускает команду Get-Culture на трех компьютерах:
PowerShell
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}
| Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture} |
Можно так же запустить команду в нескольких сеансах PSSession. Следующие команды создают сеансы PSSession на компьютерах Server01, Server02, Server03 и затем выполняется команда Get-Culture в каждом из сеансов.
PowerShell
$s = New-PSSession -ComputerName Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
| $s = New-PSSession -ComputerName Server01, Server02, Server03 Invoke-Command -Session $s -ScriptBlock {Get-Culture} |
Чтобы указать в списке компьютеров локальный компьютер надо ввести имя локального компьютера, точку (. ) или localhost.
PowerShell
Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}
| Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture} |
Как запустить скрипт на удаленных компьютерах
Чтобы запустить скрипт с локального компьютера, на удаленных компьютерах, надо использовать параметр FilePath командлета Invoke-Command.
Например, следующая команда запускает сценарий sample.ps1 на компьютерах S1 и S2:
PowerShell
Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1
| Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1 |
Результат работы скрипта отображается на локальном компьютере. Для выполнения данного скрипта нет необходимости распространять файлы скрипта.
Как остановить удалённые команды
Чтобы прервать команду, надо нажать «CTRL» + «C». Запрос прерывания передастся на удаленный компьютер и завершит работу удаленного управления.
Перезагрузите компьютер (Microsoft.PowerShell.Management) — PowerShell | Microsoft Learn
- Справочник
- Модуль:
- Microsoft.PowerShell.Управление
Перезапускает операционную систему на локальном и удаленном компьютерах.
Синтаксис
Перезагрузка компьютера [-WsmanAuthentication] [[-ИмяКомпьютера] <Строка[]>] [[-Учетные данные] ] [-Сила] [-Ждать] [-Тайм-аут ] [-Для ] [-Задержка ] [-Что, если] [-Подтверждать] [<Общие параметры>]
Описание
Этот командлет доступен только на платформе Windows.
Командлет Restart-Computer
перезапускает операционную систему на локальном и удаленном компьютерах.
Вы можете использовать параметры Restart-Computer
для запуска операций перезагрузки, чтобы указать
уровни аутентификации и альтернативные учетные данные, чтобы ограничить операции, выполняемые одновременно,
и для принудительного немедленного перезапуска.
Начиная с Windows PowerShell 3.0, вы можете дождаться завершения перезапуска, прежде чем запускать следующий
команда. Укажите время ожидания и интервал запроса, а также подождите, пока определенные службы не будут
доступны на перезагруженном компьютере. Эта функция делает практичным использование Restart-Computer
в
скрипты и функции.
Примеры
Пример 1: Перезагрузите локальный компьютер
Restart-Computer
перезапускает локальный компьютер.
Перезагрузка-Компьютер
Пример 2: перезапуск нескольких компьютеров
Restart-Computer
может перезапускать удаленные и локальные компьютеры. Параметр ComputerName принимает
массив имен компьютеров.
Restart-Computer -ComputerName Server01, Server02, localhost
Пример 3. Получение имен компьютеров из текстового файла
Restart-Computer
получает список имен компьютеров из текстового файла и перезагружает компьютеры.
Параметр ComputerName не указан. Но поскольку это первый параметр позиции, он
принимает имена компьютеров из текстового файла, которые отправляются по конвейеру.
Get-Content -Path C:\Domain01.txt | Restart-Computer
Get-Content
использует параметр Path для получения списка имен компьютеров из текстового файла,
Домен01.txt . Имена компьютеров передаются по конвейеру. Restart-Computer
перезагружает каждый
компьютер.
Пример 4. Принудительный перезапуск компьютеров, перечисленных в текстовом файле
В этом примере выполняется принудительный перезапуск компьютеров, перечисленных в Domain01.txt 9файл 0028.
имена компьютеров из текстового файла сохраняются в переменной. Параметр Force заставляет
немедленный перезапуск.
$Names = Get-Content-Path C:\Domain01.txt $Creds = Получить учетные данные Restart-Computer -ComputerName $Names -Credential $Creds -Force
Get-Content
использует параметр Path для получения списка имен компьютеров из текстового файла,
Домен01.txt . Имена компьютеров хранятся в переменной $Names
. Запросы Get-Credential
вам имя пользователя и пароль и сохраняет значения в переменной $Creds
. Перезагрузка-компьютер
использует параметры ComputerName и Credential с их переменными. Сила
параметр вызывает немедленную перезагрузку каждого компьютера.
Пример 6. Перезапустите удаленный компьютер и подождите, пока PowerShell
Restart-Computer
перезагрузит удаленный компьютер, а затем подождет до 5 минут (300 секунд) для
PowerShell, чтобы он стал доступен на перезагруженном компьютере, прежде чем он продолжит работу.
Restart-Computer -ComputerName Server01 -Wait -For PowerShell -Timeout 300 -Delay 2
Restart-Computer
использует параметр ComputerName для указания Server01 . Подождите
параметр ожидает завершения перезапуска. For указывает, что PowerShell может выполнять команды на
удаленный компьютер. Параметр Timeout задает пятиминутное ожидание. Параметр Задержка
опрашивает удаленный компьютер каждые две секунды, чтобы определить, перезапущен ли он.
Пример 7. Перезагрузите компьютер с помощью WsmanAuthentication
Restart-Computer
перезапускает удаленный компьютер с помощью механизма WsmanAuthentication .
Аутентификация Kerberos определяет, есть ли у текущего пользователя разрешение на перезапуск удаленного компьютера.
компьютер. Для получения дополнительной информации см.
Механизм аутентификации.
Restart-Computer -ComputerName Server01 -WsmanAuthentication Kerberos
Restart-Computer
использует ComputerName для указания удаленного компьютера, Server01 .
Параметр WsmanAuthentication указывает метод проверки подлинности как Kerberos .
Параметры
-ComputerName
-Подтвердить
-Учетные данные
-Задержка
-Для
-Принудительно
-Таймаут
-Подождите
-WhatIf
-WsmanAuthentication
Входы
Строка
В этот командлет можно передать строку, содержащую имя компьютера.
Выходные данные
Нет
Этот командлет не возвращает никаких выходных данных.
Примечания
- В Windows
Перезагрузка-компьютер
использует метод Win32Shutdown
инструментария управления Windows (WMI) Win32_OperatingSystem
сорт. Этот метод требует, чтобы для учетной записи пользователя была включена привилегия SeShutdownPrivilege .
используется для перезагрузки машины. - В Linux и Mac OS
Restart-Computer
использует/sbin/shutdown
Баш-инструмент.
- Об удаленном управлении Windows
- Получить учетные данные
- Протокол управления WS
Подробное руководство по началу работы с удаленной оболочкой PowerShell
Вы когда-нибудь хотели запускать команды PowerShell на удаленной машине, не выходя из своей рабочей станции? Что ж, с PowerShell Remoting вы можете это сделать. С удаленной оболочкой PowerShell вы можете надежно запускать команды и сценарии на нескольких удаленных системах.
Звучит интересно? Читайте дальше, чтобы узнать, как приручить эти удаленные машины с помощью PowerShell.
Предварительные условия
Это руководство представляет собой практическую демонстрацию. Если вы хотите продолжить, убедитесь, что у вас есть как минимум три компьютера с PowerShell 7. Один будет вашим управляющим компьютером, а два других — удаленными машинами.
В этом учебном пособии будут использоваться следующие компьютеры.
- ПК с Windows 10 с PowerShell 7, установленным в качестве управляющего компьютера. Вы будете запускать удаленные команды с этой машины.
- ПК с Windows 10 с установленным PowerShell 7. Этот компьютер будет конечной точкой для удаленного PowerShell через WinRM.
- Учетная запись пользователя на удаленной машине Windows с правами локального администратора. В этом руководстве используется учетная запись пользователя с именем ma.
- Компьютер Linux с включенным SSHD для использования в качестве удаленной конечной точки PowerShell через SSH. В этом руководстве используется Fedora 35.
- Учетная запись пользователя для выполнения удаленных команд на машине Linux. Учетная запись должна иметь доступ к sudo и SSH. В этом руководстве используется учетная запись с именем test . Создайте учетную запись пользователя на этом этапе, если у вас ее нет на вашем компьютере с Linux
Включение удаленного взаимодействия PowerShell в Windows через WinRM
При установке PowerShell 7 есть возможность включить удаленное взаимодействие PowerShell, и вы могли включить его тогда. Но, чтобы быть уверенным, выполните следующие шаги, чтобы включить удаленную оболочку PowerShell.
1. Войдите на удаленный ПК с Windows 10.
2. Откройте PowerShell от имени администратора.
3. Запустите приведенную ниже команду, чтобы включить удаленную оболочку PowerShell.
Enable-PSRemoting
Команда выполняет несколько изменений конфигурации, которые вы увидите в консоли.
Включение удаленного PowerShell в Windows через WinRM
Включение удаленного PowerShell в Linux через SSH
WinRM является эксклюзивным для Windows, что означает, что с его помощью вы не можете включить удаленный PowerShell в Linux. Вместо этого вы можете включить удаленный PowerShell через SSH в Linux. Предполагая, что вы уже установили PowerShell, выполните следующие действия.
1. Войдите в удаленную систему Linux и откройте сеанс терминала.
2. Откройте файл конфигурации сервера SSH в текстовом редакторе. Используйте любой текстовый редактор, например Gedit, Sublime или Nano. В этом примере используется Gedit.
sudo nano /etc/ssh/sshd_config
3. Затем добавьте в файл приведенную ниже строку. Эта строка создает подсистему SSH, в которой размещается процесс PowerShell.
Подсистема powershell /usr/bin/pwsh -sshs -NoLogo
Создайте подсистему SSH для PowerShell в Linux
4. Закройте редактор.
5. Наконец, перезапустите сервер SSH, выполнив следующую команду.
sudo systemctl перезапустить sshd
Добавление удаленных доверенных хостов PowerShell на локальном компьютере
Теперь ваш удаленный компьютер готов принимать команды. Но ваш управляющий компьютер может отказаться подключаться к удаленным хостам PowerShell, если они не находятся в списке доверенных хостов. Чтобы избежать возможных проблем с удаленным взаимодействием, необходимо добавить удаленные узлы в список доверенных узлов.
Откройте PowerShell от имени администратора на управляющем компьютере.
Запустите приведенную ниже команду winrm
. Эта команда добавляет ваш удаленный Windows ( 192.168.8.107
) и Linux ().0027 192.168.8.171 ) машин в список доверенных хостов вашего компьютера.
winrm set winrm/config/client '@{TrustedHosts=" 192.168.8.171,192.168.8.107"}'
Добавление удаленных машин в качестве доверенных хостов
Запуск команд на удаленных компьютерах команды на удаленной машине в этом разделе.
1. Откройте новый сеанс PowerShell на управляющем компьютере.
2. Теперь выполните приведенную ниже команду Invoke-Command 9.0028, чтобы перечислить первые пять служб на удаленной машине от имени пользователя
ma
. Команда для запуска отображается между фигурными скобками переключателя ScriptBlock
, как показано ниже.
Вызов команды `
-ИмяКомпьютера 192.168.8.107 `
-Учетные данные «ма» `
-ScriptBlock {Получить-Процесс | Select-Object -First 5 }
Список процессов на удаленном хосте PowerShell Windows
3. Чтобы выполнить то же самое с удаленным хостом Linux, вместо этого выполните приведенную ниже команду. Обратите внимание, что -HostName
заменил -ComputerName
, а -UserName
заменил -ComputerName
. Эти параметры указывают командлету Invoke-Command
, что целью является узел SSH.
Вызов команды `
-ИмяХоста 192.168.8.171 `
-Имя пользователя 'тест' `
-ScriptBlock {Получить-Процесс | Select-Object -First 5 }
Список процессов на удаленном хосте PowerShell Linux
Выполнение сценариев на удаленных компьютерах
Вы также можете запустить файл сценария PowerShell на удаленном компьютере с помощью Командлет Invoke-Command
. Но вместо указания параметра -ScriptBlock
вы укажете параметр -FilePath
, за которым следует локальный путь сценария.
1. Сначала создайте на локальном компьютере файл сценария PowerShell с именем nametime. ps1
.
2. Откройте сценарий в предпочитаемом вами редакторе сценариев и добавьте следующий код. Сохраните файл после этого.
# имявремя.ps1
имя хоста
Get-Date
Создайте сценарий PowerShell
3. Выполните командлет Invoke-command
с параметром -FilePath
. -FilePath
должен указывать на файл сценария. В этом примере файл сценария находится в том же рабочем каталоге.
# Вызов сценария на удаленном PowerShell через WinRM
Вызвать команду `
-ИмяКомпьютера 192.168.8.107 `
-Учетные данные «ма» `
-FilePath .\nametime.ps1
# Вызов сценария на удаленном PowerShell через SSH
Вызвать команду `
-ИмяХоста 192.168.8.171 `
-Имя пользователя 'тест' `
-FilePath .\nametime.ps1
Вызов сценария на удаленных узлах PowerShell
Интерактивное управление удаленным компьютером
В предыдущем разделе вы видели, как выполнять отдельные команды на удаленном компьютере. В этом разделе вы научитесь открывать интерактивный сеанс, чтобы вы могли запускать несколько команд на удаленном компьютере, как если бы он был локальным.
1. Выполните команду Enter-PSSession
, чтобы запустить удаленный сеанс на машине по адресу 192.168.8.107
от имени пользователя ma
.
Enter-PSSession -ComputerName 192.168.8.107 -Credential ma
Введите пароль учетной записи удаленного пользователя, ma , в приглашении, как показано ниже.
Вход в интерактивный удаленный сеанс
Вы увидите новое приглашение, как показано ниже. IP-адрес в квадратных скобках указывает на удаленный узел PowerShell.
Просмотр удаленной подсказки
3. Выведите список файлов в текущем рабочем каталоге с помощью команды dir
, как показано ниже. Вы можете выполнять столько команд PowerShell, сколько хотите в течение сеанса dir
Содержимое каталога должно быть на вашем экране, как на скриншоте ниже.
Линтинг файлов на удаленном компьютере
4. Выполните приведенный ниже командлет Exit-PSSession
, чтобы выйти из сеанса после завершения управления удаленным компьютером.
Exit-PSSession
При выходе вы должны вернуться к локальному приглашению, как показано на снимке экрана ниже
Выход из удаленного сеанса
Отключение и повторное подключение удаленных сеансов PowerShell
Сеанс можно постоянно хранить в качестве альтернативы интерактивным сеансам или одноразовым командам. Сохранение сеанса позволяет переключаться между сеансами без потери контекста. В этом разделе вы научитесь создавать постоянные сеансы и управлять ими.
1. Запустите командлет New-PSSession
для создания сеанса на удаленном компьютере 192.168.8.107
от имени пользователя ma
( -Credential
). Сохраните сессию в переменной $var
следующим образом.
$var = New-PSSession -ComputerName 192. 168.8.107 -Credential ma
2. Запустите переменную $var
, чтобы просмотреть ее содержимое следующим образом:
Как показано ниже, вы должны увидеть объект сеанса с RemoteMachine ComputerType и Состояние установлено на Opened .
Отображение сведений о сеансе
3. Запустите команду Enter-PSSession
, чтобы войти в сеанс, сохраненный в $var
.
Enter-PSSession $var
Если все в порядке, подсказка изменится на удаленную подсказку без дальнейшего вывода, как показано ниже.
Вход в постоянный удаленный сеанс
4. Создайте переменную $rem1
внутри сеанса. Используйте любое имя переменной и строку идентификатора, которые вам подходят. Вы будете использовать эту переменную позже, чтобы определить, подключились ли вы к тому же сеансу.
$rem1 = "тот же сеанс"
5. Выполните приведенную ниже команду, чтобы выйти из удаленного сеанса PowerShell.
Exit-PSSession
Отключение от постоянного удаленного сеанса
6. Повторно установите удаленный сеанс PowerShell.
Enter-PSSession $var
7. Выполните переменную $rem1
в приглашении удаленного сеанса, как показано ниже, чтобы просмотреть ее значение.
Вы должны увидеть то же значение, которое вы установили ранее перед выходом из удаленного сеанса PowerShell, подтверждая, что вы повторно подключились к тому же сеансу.
Просмотр значения переменной сеанса
8. Запустите Команда Exit-PSSession
для повторного выхода из сеанса следующим образом.
Exit-PSSession
9. Наконец, выполните Invoke-Command
с переключателем сеанса
, установленным на $var
, чтобы отобразить имя хоста удаленного компьютера в том же удаленном сеансе. Этот метод представляет собой альтернативный способ запуска команд в одном сеансе без ручного подключения, отключения и повторного подключения к одному сеансу.