自動清理 PSSession 的最佳實踐

通過 New-PSsession cmdlet 建立遠端會話時,PSSession 將持續存在,直到當前的 PowerShell 會話結束。這意味著,預設情況下,PSSession 和所有相關資源將繼續使用,直到當前 PowerShell 會話結束。

多個活動的 PSSessions 可能會成為資源的壓力,特別是對於在單個 PowerShell 會話中建立數百個 PSSessions 的長時間執行或相互連結的指令碼。

最佳做法是在完成使用後明確刪除每個 PSSession。 [1]

以下程式碼模板使用 try-catch-finally 來實現上述目的,將錯誤處理與安全方式相結合,以確保在完成使用時刪除所有建立的 PSSessions

try
{
    $session = New-PSsession -Computername "RemoteMachineName"
    Invoke-Command -Session $session -ScriptBlock {write-host "This is running on $ENV:ComputerName"}
}
catch
{
    Write-Output "ERROR: $_"
}
finally
{
    if ($session)
    {
        Remove-PSSession $session
    }
}

參考文獻:[1] https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/new-pssession