2013-10-16 84 views
2

我正在编写一个C#服务器应用程序,它可以在Exchange服务器上调用多个远程Powershell cmdlet。这不是我应用程序的主要活动,但偶尔会调用这些函数。当他们这样做时,我执行以下操作:远程PowerShell会话应该关闭吗?

  1. 从我的配置中初始化WSManConnectionInfo对象。
  2. 使用RunspaceFactory.CreateRunspace创建新的运行空间。
  3. 打开运行空间。
  4. 将运行空间分配给新的PowerShell对象。
  5. 调用我的命令。
  6. 配置PowerShellRunspace对象。

现在,是否真的需要为每次调用完成所有这些步骤?假设每分钟,每小时甚至每天都可以拨打一个电话,我并不担心业绩。但是我正在寻找一个整洁的解决方案,并且想知道是否创建一个Runspace对象并且一次又一次地调用它可能会更加优雅。

重复使用Runspace对象并保持它打开是否存在问题?我是否应该保持这个对象的存在,但是每当我需要的时候都可以打电话给Close()Open()?或者我应该不依赖于它保持稳定一段时间(与“随着时间的推移”这里是服务器应用程序的生命周期,这可能(和应该)是几个月。

回答

1

我注意到,远程会话,如果你离开他们打开并且不打算再次使用它们会导致问题,一次可以在服务器上打开的远程shell的数量通常是有限的,如果你不打算自己清理,你可以打开这个限制很容易,你将无法打开另一个远程shell。

我还会提到,取决于远程shell的最大大小(默认是50MB,但可以增加,当我运行安装程序时我通常需要大幅增加),你可能会吃掉我不必要的。你提到你并不担心表现,尽管这对你来说可能不是问题。

这就是说,我会尽量保持干净整洁。没有理由不正确清理自己。

+0

同意没有理由也不是。更不用说在性能之上,开放的身份验证会话听起来并不像是一件好事...... –

+0

@AthomSfere非常好的一点,我没有想过考虑远程shell有任何安全风险,而我对进一步发表的评论不够了解,但至少应该考虑一些事情。 – tnw