Создание и контроль постоянных PSSession с помощью Windows PowerShell

Завершено

Для создания постоянного подключения используется команда New-PSSession. Многие из ее параметров совпадают с параметрами Invoke-Command, включая -Credential, –Port и –UseSSL. Это связано с тем, что вы создаете такое же подключение, которое создает Invoke-Command. Разница состоит в том, что подключение не закрывается сразу же, а продолжает работать.

Сеансы PowerShell имеют тайм-аут простоя, и когда его время истекает, удаленный компьютер автоматически их закрывает. Закрытие сеансов PowerShell отличаются от их отключения тем, что повторное подключение закрытого сеанса невозможно. Его можно только удалить, а затем при необходимости создать заново.

Команда New-PSSession может принимать несколько имен компьютеров, что приводит к созданию нескольких объектов сеансов PowerShell. При выполнении New-PSSession она выводит объекты, представляющие только что созданные сеансы PowerShell. Эти сеансы можно назначать переменным, чтобы к ним было проще обращаться в будущем.

Сеанс PowerShell можно использовать сразу после его создания. И Invoke-Command, и Enter-PSSession могут принимать объект сеанса PowerShell вместо имени компьютера. Invoke-Command может принимать несколько объектов сеансов PowerShell. Для этой цели используется параметр –Session. При наличии этого параметра команды используют существующий сеанс PowerShell вместо создания нового подключения. Когда команда завершит выполнение или вы выйдете из сеанса PowerShell, сеанс продолжит работу и сохранит подключение, оставаясь готовым к использованию в будущем.

Например, вы можете использовать следующие команды, чтобы войти в сеанс PowerShell на LON-CL1, а затем закрыть его:

$client = New-PSSession –ComputerName LON-CL1
Enter-PSSession –Session $client
Exit-PSSession

Такой же результат можно получить с помощью следующих команд:

$computers = New-PSSession –ComputerName LON-CL1,LON-DC1
Invoke-Command –Session $computers –ScriptBlock { Get-Process }

Например, следующая команда может использовать переменную $dc, чтобы открыть сеанс подключения PowerShell к LON-DC1, в скрипте или блоке кода:

$dc = New-PSSession –ComputerName LON-DC1

Следующая команда создает удаленные сеансы на Server01 и Server02, а объекты сеансов хранятся в переменной $s:

$s = New-PSSession -ComputerName Server01, Server02

После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные из одной команды и использовать их в другой.

Например, следующая команда выполняет команду Get-HotFix в сеансах из переменной $s и сохраняет результаты в переменной $h:

Invoke-Command -Session $s {$h = Get-HotFix}

Переменная $h создается в каждом сеансе из $s, но она не существует в локальном сеансе. Теперь вы можете использовать данные в переменной $h с другими командами в том же сеансе, а результаты будут отображаться на локальном компьютере. Например:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}