powershell脚本杀死.exe终端服务器断开会话

时间:2015-06-17 07:55:44

标签: session powershell disconnected-session

我正在寻找一种杀死断开的终端会话的.exe的方法。这是关于Navision的;我们拥有有限的许可证,并希望继续杀死未使用的许可证。

我知道有完全注销断开连接的会话的方法,但我更愿意只关闭这个特定的进度。

我确实找到了一个博客文章,其中包含的代码完全符合我的要求。一个powershell脚本,用于扫描断开连接的会话上的某个.exe,然后将其删除。 http://www.interworks.com/blogs/jpoehls/2012/12/12/killing-processes-disconnected-terminal-service-sessions代码发布在此网页上。

不幸的是它不起作用,我收到以下错误:

PS C:\scripts> .\navscript.ps1
An empty pipe element is not allowed.
At C:\scripts\navscript.ps1:91 char:10
+         | <<<<  % { $id = $_;
+ CategoryInfo          : ParserError: (:) [
+ FullyQualifiedErrorId : EmptyPipeElement

除了花费大量时间在谷歌上寻找不同的解决方案外,我还试图删除第90行的空行。这导致了另一个错误:

PS C:\scripts> .\navscript.ps1
Exception calling "Substring" with "2" argument(s): "Lengte kan niet minder dan nul zijn.
Parameternaam: length"
At C:\scripts\navscript.ps1:52 char:44
+                     ;"ID" = $line.Substring <<<< ($line.IndexOf(" ",     $starters.Username), $starters.ID - $line.IndexO
f(" ", $starters.Username) + 2).trim()
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

我希望有人知道如何让这个工作。

1 个答案:

答案 0 :(得分:1)

query session命令输出已本地化,因此如果第一行与预期的行不匹配,则Get-Sessions中硬编码到函数中的子字符串将无法触发:

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE

请注意,该行的第一个符号处有一个空格。

因此,要修复脚本,您必须在目标PC上运行query session,获取第一行并手动更新第40行到第45行,并在第一行本地化输出中显示正确的字符序列。