全局变量中的会话信息

时间:2014-04-14 15:15:49

标签: session powershell global-variables

我在PowerShell中有一个函数,它建立一个会话并将信息存储在全局变量中:

$global:transport = new-object Fix.ServerSocketTransport $FixHost, $FixPort

现在,在应用程序中,$global:transport变量用于发送和接收数据。

脚本执行结束后会话会被关闭吗? $global:transport值是否会被重置? (我已经注释掉断开会话的部分)

脚本结束后,即使我没有创建新会话,它也会通过$global:transport变量发送和接收数据。为什么会这样?

1 个答案:

答案 0 :(得分:2)

全球会议确实是全球性的。脚本执行(并创建全局)后,该变量及其值仍然存在。 BTW PowerShell / .NET不会自动关闭对象。如果对象实现了终结器,那么当它通过垃圾收集(在将来某个不确定的时间)收集时,终结器将运行并关闭或释放相关的本机资源。如果对象实现了IDisposable或者在其上具有Close()或Dispose()方法,则应在完成对象时调用该方法。另外,为了使PowerShell永远不会挂在对象上(你确实把它放在了全局),你可以A)将全局变量设置为$ null或B)(甚至更好)使用Remove-删除变量变量。

另一个选择是在你的大多数脚本(启动脚本)中创建一个脚本范围变量。此脚本变量应该对您执行的任何其他脚本可见,并在脚本完成时消失。但是,与上面的情况一样,如果对象实现了Close()或Dispose(),那么当你完成它时,你应该在对象上调用它。