Интерактивная работа с удаленными системами в CTP3
Давайте поговорим сегодня об одной из отличных новых возможностей Windows PowerShell V2 – интерактивной работе с удаленными объектами.
Начнем с примера:
PS> $env:COMPUTERNAME # Check local computer name.
VLADIMIA64
PS> Enter-PSSession Vladimia06 # Remote to other computer.
[vladimia06]: PS C:\Users\Vladimia\Documents> $env:COMPUTERNAME # Check remote computer name.
Vladimia06
[vladimia06]: PS C:\Users\Vladimia\Documents> $PSVersionTable # Check powershell version on remote computer.
Name Value
---- -----
CLRVersion 2.0.50727.3521
BuildVersion 6.1.7015.0
PSVersion 2.0
PSCompatibleVersions {1.0, 2.0}
[vladimia06]: PS C:\Users\Vladimia\Documents> function prompt {} # See how prompt function is always prefixed by []: in interactive remoting.
[vladimia06]: PS>Exit-PSSession # Exit remote session.
PS>
Как можно увидеть, Enter- PSSession начинает сеанс работы с удаленными системами, а Exit- PSSession завершает его. Сокращения для этих команд – etsn и exsn. Вместо Exit- PSSession можно также использовать ключевое слово exit.
Интерактивная сессия с удаленными системами использует ту же инфраструктуру удаленной работы, что и другие коммандлеты удаленной работы PowerShell. WinRM обеспечивает транспорт и поддерживает службу приемника (listener), которая отвечает за создание удаленных сеансов PowerShell.
Аналогично Invoke-Command, для организации удаленного соединения вы можете использовать имя компьютера. В этом случае удаленная сессия PSSession неявно создается при входе и закрывается после выхода.
С другой стороны, вы можете создать постоянный сеанс, используя команду New - PSSession в паре с Enter - PSSession. В этом случае сеанс не будет закрыт после окончания работы, и в него можно входить в любой момент, когда это понадобится.
PS> $s = nsn vladimia06 # Create a persistent remote session.
PS> etsn $s
[vladimia06]: PS C:\Users\Vladimia\Documents> $x = 123 # Create a variable.
[vladimia06]: PS C:\Users\Vladimia\Documents> exsn
PS> etsn $s
[vladimia06]: PS C:\Users\Vladimia\Documents> $x # Check that a variable is still there
123
[vladimia06]: PS C:\Users\Vladimia\Documents> exsn
PS> icm $s {$x} # The variable created in interactive remoting can also be accessed using remote invocation.
123
PS> rsn $s # Close the remote session.
PS>
Учтите, что переменные, созданные в сеансе удаленной работы, не будут доступны в вашем локальном пространстве после выхода из сеанса. Чтобы получить к ним доступ со стороны клиента, необходимо использовать Invoke- Command. Соответствующий объект будет передан через сеть и собран на другой стороне. Примитивные типы будут восстановлены в полнофункциональные «живые» объекты, но более сложные объекты будут сведены к десериализованным «наборам свойств». Мы еще поговорим о сериализации в одном из следующих сообщений.
Пробуйте, используйте, любите!
Владимир Аверкин (Vladimir Averkin)
Windows PowerShell Team
Перевод: Виктор Горбунков