【问题标题】:Powershell - Using TSSession is giving mixed resultsPowershell - 使用 TSSession 的结果好坏参半
【发布时间】:2021-03-30 04:57:35
【问题描述】:

我正在尝试使用 Get-TSSession 检查断开连接的会话,但遇到了问题。 我使用 Get-ADComputer 拉出我的服务器列表,虽然 Get-ADComputer 完全按照我想要的方式工作,但当我使用 Get-TSSession 时,出于某种原因它只拉出我的域控制器,我不确定为什么。

例如,这里是我尝试运行的整个脚本,但就像我说的那样,它只拉取 4 个域控制器服务器,仅此而已。

Import-Module ActiveDirectory
Import-Module PSTerminalServices
$Servers = Get-ADComputer -Filter {(OperatingSystem -like "*server*") -and (Enabled -eq "True")} | Select-Object -ExpandProperty Name
ForEach ($Server in $Servers)
{ 
Get-TSSession -ComputerName $Server
}

现在,如果我运行同样的命令,但它本身会给我返回数十台服务器。

Get-ADComputer -Filter {(OperatingSystem -like "*server*") -and (Enabled -eq "True")} | Select-Object -ExpandProperty Name

我错过了什么吗?

【问题讨论】:

  • 您知道您是否有权在除您的 DC 之外的任何服务器上运行 Get-TSSession 吗?您使用的是域管理员帐户还是什么?如果您手动执行该命令,您是否能够针对其他服务器之一运行该命令?
  • 是的,我可以做任何我需要做的事情,因为我有一个域管理员帐户。我已经按名称尝试使用特定服务器而不是从 AD 中提取它,它就像一个魅力。我不知道我做错了什么。
  • 我建议尝试详细日志记录。试试ForEach ($Server in $Servers) { Get-TSSession -ComputerName $Server -Verbose },看看这是否能说明问题。
  • 谢谢@TheMadTechnician,不幸的是这并没有真正帮助。它只显示到域控制器的连接过程。它甚至从不尝试攻击其他服务器。
  • 这强烈暗示您只有$Servers 中的域控制器。你能在点击ForEach 循环之前回显$Servers 中的内容吗?您运行脚本的方式是否与运行单个命令的方式不同?

标签: powershell


【解决方案1】:
Import-Module ActiveDirectory
Import-Module PSTerminalServices
$Servers = Get-ADComputer -Filter {(OperatingSystem -like "*server*") -and (Enabled -eq "True")} | Select-Object -ExpandProperty Name
ForEach ($Server in $Servers)
{ 
    Write-Output $Server
    Try {
        Get-TSSession -ComputerName $Server
    }
    Catch {
        Write-Output "An error occurred while enumerating $server"
    }
}

您的代码在枚举域控制器后也停止了,直到我将代码扩充到上面。

【讨论】:

  • 我没有看到任何增强。你到底改变了什么?
  • Darrell,我也这样做了,使用 try and catch,同时还过滤掉了域控制器,并且我删除了一个旧的退役服务器,这似乎可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2018-12-24
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
相关资源
最近更新 更多