使用 Windows PowerShell 建立和管理永續性 PSSession
您可以使用 New-PSSession 命令來建立持續連線。 此命令包含許多與 Invoke-Command 相同的參數,包括 -Credential、–Port 和 –UseSSL。 這是因為您正在建立的連線與 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
現在,工作階段已建立,您可以在其中執行任何命令。 因為工作階段是持續性,您可以從單一命令收集資料,並將它用於後續的命令。
例如,下列命令會在 變數的工作階段中執行 $s
命令,並將結果儲存在 $h
變數中:
Invoke-Command -Session $s {$h = Get-HotFix}
$h
變數是在 $s
的每個工作階段中所建立,但在本機工作階段中不存在。 現在,您可以使用 $h
變數中的資料搭配相同工作階段中的其他命令,而且結果會顯示在本機電腦上。 例如:
Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}