Windows PowerShell を使用して永続的な PSSession を作成および管理する
New-PSSession コマンドを使って永続的な接続を作成します。 このコマンドには、-Credential、-Port、-UseSSL など、Invoke-Command と同じパラメーターの多くが含まれています。 これは、Invoke-Command によって作成されるものと同じ接続を作成しているためです。 ただし、この接続をすぐに閉じるのではなく、実行したままにします。
PowerShell セッションにはアイドル タイムアウトがあり、それが経過すると、それらはリモート コンピューターによって自動的に閉じられます。 閉じられ PowerShell セッションは、切断された PowerShell セッションとは異なり、閉じられた PowerShell セッションを接続し直すことはできません。 この場合は、PowerShell セッションを削除してからもう一度作成することだけができます。
New-PSSession は複数のコンピューター名を受け取ることができ、これにより複数の PowerShell セッション オブジェクトが作成されます。 New-PSSession コマンドを実行すると、新しく作成された PowerShell セッションを表すオブジェクトが出力されます。 これらの PowerShell セッションを変数に割り当てて、参照しやすくし、将来使うことができます。
PowerShell セッションは、作成してすぐに使用できます。 Invoke-Command と Enter-PSSession コマンドはどちらも、コンピューター名の代わりに PowerShell セッション オブジェクトを受け取ることができます。 Invoke-Command は、複数の PowerShell セッション オブジェクトを受け取ることができます。 この目的には、コマンドの -Session パラメーターを使います。 このパラメーターを使う、新しい接続を作成する代わりに、既存の PowerShell セッションがコマンドで使われます。 コマンドの実行が完了するか、ユーザーが PowerShell セッションを終了しても、PowerShell セッションは実行し続けて接続されたままになり、後ですぐに使用できます。
たとえば、次のコマンドを使うと、LON-CL1 で PowerShell セッションに入り、それを閉じることができます。
$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
を使って、スクリプトまたはコード ブロック内で LON-DC1 への PowerShell セッションを開くことができます。
$dc = New-PSSession –ComputerName LON-DC1
次のコマンドは、Server01 と Server02 へのリモート セッションを作成し、セッション オブジェクトを $s
変数に格納します。
$s = New-PSSession -ComputerName Server01, Server02
セッションが確立されたので、それらで任意のコマンドを実行できます。 また、セッションは永続的であるため、1 つのコマンドからデータを収集して、別のコマンドでそのデータを利用できます。
たとえば、次のコマンドは 変数のセッションで $s
コマンドを実行し、結果を $h
変数に保存します。
Invoke-Command -Session $s {$h = Get-HotFix}
$h
変数は $s
のセッションごとに作成されますが、ローカル セッションには存在しません。 これで、$h
変数のデータを同じセッション内の他のコマンドで使用できるようになり、結果はローカル コンピューターに表示されます。 次に例を示します。
Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}