我正在寻找一种杀死断开的终端会话的.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
我希望有人知道如何让这个工作。
答案 0 :(得分:1)
query session
命令输出已本地化,因此如果第一行与预期的行不匹配,则Get-Sessions
中硬编码到函数中的子字符串将无法触发:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
请注意,该行的第一个符号处有一个空格。
因此,要修复脚本,您必须在目标PC上运行query session
,获取第一行并手动更新第40行到第45行,并在第一行本地化输出中显示正确的字符序列。