São necessários 3 scripts
1. get_loggeduser.ps1 (responsável por pegar as informações da sessão)
echo $env:username
netstat -an | select-string ":3389" | select-string "ESTABLISHED"
2. sendmail_login.ps1 (responsável pelo envio de email
$SMTPServer = "smtp.office365.com"
$SMTPPort = "587"
$Username = "email@dominio.com.br"
$Password = "suasenha"
$to = "destino@dominio.com.br"
$subject = "Sessao TS Conectada"
$body = [IO.File]::ReadAllText("C:\scripts\rdp_alert\log\login.txt")
$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.from = $username
$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host “Mail Sent”
3. login_rdp.bat (responsável pela execução dos PS)
@echo off
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\get_loggeduser.ps1" > C:\scripts\rdp_alert\log\login.txt
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\sendmail_login.ps1"
Pronto.. agora para funcionar você deve criar um agendamento no taskmanager quando no log Microsoft-Windows-TerminalServices-LocalSessionManager/Operational ocorrer os eventos no log 25 e 21 no logon ou 24 no logoff
Eu criei outros dois scripts para melhor identificação do alerta (logoff_rdp e sendmail_logoff.ps1), desta forma visualizo no próprio assunto do e-mail o que ocorreu.
fonte: https://www.virtualizationhowto.com/2015/03/receive-alerts-when-user-connects-or-disconnects-from-rdp/
Caso queira criptografar a senha no script, voce deve:
Rodar este script via powershell
$credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content C:\scripts\rdp_alert\cryptpassword.pass
O mesmo irá criar um arquivo chamado cryptpassword.pass com o usuario e senha criptografado. agora substitua as seguintes linhas
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
por estas linhas
$encrypted = Get-Content C:\scripts\rdp_alert\cryptpassword.pass | ConvertTo-SecureString
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $encrypted);
fonte: https://interworks.com/blog/trhymer/2013/07/08/powershell-how-encrypt-and-store-credentials-securely-use-automation-scripts/