Назад | Перейти на главную страницу

Скрипт для подсчета уникальных пользователей, вошедших на сервер удаленного рабочего стола?

Я пытаюсь создать веб-интерфейс, который позволит нам отслеживать, сколько пользователей вошли в систему на нашей ферме терминальных серверов 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"
}

…. Итак, обо всем по порядку - как мне получить уникальные логины ... Во-вторых, как мне получить активные логины, и в-третьих, как мне преобразовать первый сценарий в формат второго скрипта? Чтобы получить уникальные логины, очевидно, мне нужно было бы иметь какой-то массив, в котором хранятся логины, при условии, что этого значения в массиве еще нет ... но я не знаю, как это сделать. Второй - это сопоставление идентификатора с идентификатором, который уже есть в списке, у которого нет события выхода из системы ... не знаю, как это сделать. Любые идеи? Я ценю помощь.

Сначала я бы отформатировал скрипт до читаемого состояния (отступы, разрывы строк)
и разделите его, чтобы получить только данные.

Если ваша среда не воспринимает настройку свойств как должное

## 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