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