リモートサーバーで5つの新しいPSセッションを開始し、Get-PSSessionを実行してそれらをすべて表示できます。
PS C:\> New-PSSession -ComputerName MyServerName
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Session1 MyServerName Opened Microsoft.PowerShell Available
[repeat 4 more times]
予想どおり、6番目のセッションを開こうとすると、「いいえ」というエラーが表示されます(PoswerShellsのデフォルトの同時リモートPSSession数は5に制限されているため)。ただし、Get-Sessionを実行すると5つのセッションがすべて表示されるため、これまでどおりすべてが機能しています。
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]
PS C:\> Get-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Session1 MyServerName Opened Microsoft.PowerShell Available
2 Session2 MyServerName Opened Microsoft.PowerShell Available
3 Session3 MyServerName Opened Microsoft.PowerShell Available
4 Session4 MyServerName Opened Microsoft.PowerShell Available
5 Session5 MyServerName Opened Microsoft.PowerShell Available
ただし、そのコンソールを閉じて新しいコンソールを開くと、Get-PSSession( '-ComputerName'パラメーターが定義されているかどうかにかかわらず)を実行すると、開いているセッションがまったく表示されません。
PS C:\> Get-PSSession
PS C:\>
新しいコンソールで新しいセッションを開こうとすると、5つ以上の同時セッションに関する同じエラーが表示されるため、これらのセッションはまだ開いていることがわかります。
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]
「Get-PSSession Get-Help -full」を実行すると、「Get-PSSession -ComputerName MyServerNameは、特定のサーバーで開始されたセッションまたはコンピューターに関係なく、少なくともallリモートPSセッションを取得する必要があります(少なくとも私がそれを理解する方法):
「コマンドは、異なるセッションまたは異なるコンピューターで作成された場合でも、[リモートサーバー]上のすべてのセッションを返します。」
だから、リモートサーバーで開いているPSセッションを見つけたり削除したりする方法がありますか?1つのコンソールセッションからすべてを行う必要はありませんか?
私が言えることから...
作成したPSSessionは "MyServerName"でライブであり、最初に作成したセッションの間、Get-PSSessionによって返されます(引数なしで、リモートから送信するボックスのPowerShellウィンドウ)。作成されたセッションを閉じると、セッションはコンピューター上になくなります。これが、新しいPowerShellウィンドウを閉じて開くときにGet-PSSessionが何も返さない理由です。それらはコンピューター上で「生きた」ことはなく、リモートセッションですが、元のPowerShellウィンドウではスコープにありました。作成しました。
セッションがまだMyServerNameにある場合、最大セッションについて言及したエラーが原因であると思われるため、次のコマンドを入力するとリストされます。
Get-PSSession -ComputerName MyServerName
既存のセッション/ウィンドウでそれらすべてを再接続する場合は、次のようにします。
Get-PSSession -ComputerName MyServerName | Connect-PSSession
それらをすべて削除して、MyServerNameに新しいPSSessionを作成できるようにする
Get-PSSession -ComputerName MyServerName | Remove-PSSession
ドキュメントをさらに詳しく見ると、PowerShellウィンドウを閉じたときにすべてのセッションが無期限に有効になるわけではありません。見る:
Get-Help about_Remote_Disconnected_Sessions -ShowWindow
部分的な抜粋(強調を含む):
PSSessionでコマンドを実行中にPSSessionが作成されたセッションを閉じる(終了する)と、Windows PowerShellはリモートコンピューターでPSSessionを切断状態に維持します。 PSSessionが作成されたセッションを閉じた(終了した)が、PSSessionでコマンドが実行されていない場合、Windows PowerShellはPSSessionを維持しようとしません。
私が見ることができるものから、a)切断されていないセッション、またはb)コマンドの実行中のセッションは、PSSessionを開始したPowerShellウィンドウを閉じると破棄されます。さらに、ドキュメントにはタイムアウトも記載されているようです(おそらくサーバー上のPSSessionConfigurationsに依存しますが、私はそれらについてはまだ何も知りません(存在する以外)。
これは、PowerShell Remotingのドキュメントのいくつかをふるい分けるのに良い言い訳でした。
Get-Help *PSSession*
Get-Help *remote*
私の実験から、セッションが何もしていない場合、セッションはリモートエンドで閉じられます。それを防ぐには、次のいずれかを実行させます:
Invoke-Command -Session $s { ... } -AsJob
Invoke-Command server01 { ... } -Disconnected
または、他のオプションはセッションを切断することです:
Disconnect-PSSession -Id (1..5)
どちらのアプローチでも、リモートセッションは存続します。