自动清理 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