Script para contar usuários únicos conectados ao servidor de área de trabalho remota?

1

Estou tentando criar uma interface da Web para nos permitir monitorar quantos usuários estão conectados ao nosso farm de servidores de terminal 2008r2. Eu tenho um script que é um bom ponto de partida e o ajustei para o nosso ambiente, mas preciso adicionar algumas coisas e não sei como. Eu preciso de logins únicos ... aqui é o meu ponto de partida ....

$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"
}

… .Então, as primeiras coisas primeiro- Como obtenho logins exclusivos ... Segundo, como obtenho logins ativos e, terceiro, como faço para que o primeiro script seja inserido no formato do segundo script? Para obter logins exclusivos, Obviamente, eu teria que ter algum tipo de array que os logins são armazenados, desde que não exista esse valor no array ... mas não sei como. O segundo seria uma questão de combinar um ID com um já existente na lista que não tenha um evento de logout ... também não sei como fazer isso. Alguma ideia? Agradeço a ajuda.

    
por user1467163 16.11.2018 / 21:49

1 resposta

1

Eu primeiro formatar o script para um estado legível (recuo, quebras de linha)
e despir para apenas adquirir dados.

Sem o seu ambiente, tendo seus ajustes de propriedades como concedidos

## Q:\Test18\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

E fazendo uma análise dos dados posteriormente com as ferramentas:

Mas eu tentaria obter uma versão mais atualizada do PowerShell primeiro do que o PSv2 incluído

    
por 16.11.2018 / 23:04