用于计算登录到远程桌面服务器的唯一用户数量的脚本?

用于计算登录到远程桌面服务器的唯一用户数量的脚本?

我正在尝试创建一个 Web 界面,以便我们监控有多少用户登录到我们的 2008r2 终端服务器群。我有一个很好的起点脚本,我已经针对我们的环境对其进行了调整,但我需要添加一些内容,但我不知道该怎么做。我需要获得唯一的登录信息...这是我的起点....

$ComputerList = "RDS1","RDS2","RDS3"
foreach ($ComputerName in $ComputerList){ 
$UserCount=0
$colEvents = Get-WinEvent -ComputerName $ComputerName -  
LogName "Microsoft-Windows-TerminalServices-
LocalSessionManager/Operational" |  
Where {$_.ID -eq "21"} |  
Select -Property TimeCreated, Message 
Write-Host "`nServer     Date       Login Time Username"
Foreach ($Event in $colEvents) 
{ 
$EventTimeCreated = $Event.TimeCreated 
$EventMessage = $Event.Message -split "`n" | Select-Object-Index "2"
$EventMessageUser = $EventMessage.Substring(6) 
Write-Host "$ComputerName $EventTimeCreated   $EventMessageUser" 
$UserCount = $UserCount + 1
}
Write-Host "Number of Users: $UserCount"
}

….所以首先要做的事情是 - 如何获得唯一登录信息...其次,如何获得活动登录信息,第三,如何将第一个脚本转换为第二个脚本的格式?要获得唯一登录信息,显然,我必须有某种数组来存储登录信息,前提是数组中还没有该值...但我不知道怎么做。第二个问题是将 ID 与列表中没有注销事件的 ID 进行匹配....也不知道该怎么做。有什么想法吗?非常感谢您的帮助。

答案1

我首先将脚本格式化为可读状态(缩进、换行)
并将其精简为仅获取数据。

如果你的环境不接受你对属性的调整

## Q:\Test\2018\11\16\SF_940425.ps1

$ComputerList = "RDS1","RDS2","RDS3"
$data = ForEach ($ComputerName in $ComputerList){
    $colEvents = Get-WinEvent -ComputerName $ComputerName `
        -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" |
      Where {$_.ID -eq "21"} | Select -Property TimeCreated, Message

    Foreach ($Event in $colEvents){
        New-Object PSObject -Property @{
            ComputerName     = $ComputerName
            EventTimeCreated = $Event.TimeCreated
            EventMessage     = ($Event.Message -split "`n")[2]
            User             = $EventMessage.Substring(6)
        }
    }
}
$data
$data | Export-Csv '.\ServerUserList.csv' -NoTypeInformation

稍后使用以下工具进行数据分析:

但我会先尝试获取更实际的 PowerShell 版本比包含的 PSv2

相关内容