Интерактивная работа с удаленными системами в 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

Перевод: Виктор Горбунков