Скачиваем исходники и распаковываем их на диск D:
https://github.com/trmsjj/vnc_screenshot
Т.к. для удобства нужно знать имена пользователей, а не только адреса, я немного изменил код Program.cs Для просмотра рекомендую Notepad++.
Если не берёте готовую программу моей сборки В командной строке выполняем:
Код: Выделить всё
C:\Windows\System32>"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" "D:\vnc_screenshot-master\vnc_screenshot\vnc_screenshot.csproj"
Проверяем работу
Код: Выделить всё
C:\Windows\System32>"D:\vnc_screenshot-master\vnc_screenshot\bin\Debug\vnc_screenshot.exe" i:192.168.10.10 p:password o:"D:"
Код: Выделить всё
C:\Windows\System32>"D:\vnc_screenshot-master\vnc_screenshot\bin\Debug\vnc_screenshot.exe" f:"D:\vnc_screenshot-master\vnc_screenshot\bin\Debug\iplist.txt" p:password o:"D:"
Теперь можно сделать два скрипта
В первом делаем скриншоты:
Код: Выделить всё
# Получаем пользователей, которые сегодня логинились на терминальный сервер
# и создаем из них файл для программы vncss формата "ip:name"
# Если >=WS2012 можно проверять доступность хоста "Test-NetConnection -ComputerName $event.Properties[2].Value -Count 1 -Port 5900"
$iplist = "D:\vncss\iplist.txt"
Out-File $iplist
$CurrentDate = Get-Date -Hour 0 -Minute 0 -Second 0
$allRDPevents = Get-WinEvent -ComputerName 192.168.1.4 -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" | ?{$_.id -eq 1149 } | ?{$_.TimeCreated -ge $CurrentDate }
$results = @{}
foreach ($event in $allRDPevents){
if (($event.Properties[0].Value) -and !($results.($event.Properties[0].Value))) {
$results += @{
$event.Properties[0].Value = $event.Properties[2].Value
}
}
}
$results.Keys | foreach {
$($results.Item($_))+":"+$_ | Out-File $iplist -Append
}
# делаем новые скиншоты
D:\vncss\vncss.exe f:"D:\vncss\iplist.txt" p:password:"D:\vncss\ss"
Код: Выделить всё
# в 00 часов каждый день
$pathss = "D:\vncss\ss\*.png"
$rar = "C:\Program Files\WinRAR\Rar.exe"
$Days = -30 # храним только последние 30 дней
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
# Архивируем папку ss и очищаем её
$currentArhPath = $pathss + "\vncss-" + (get-date -Format yyyyMMdd) + ".rar"
&$rar a -m5 -s -ep1 -df $currentArhPath $pathss
# удаляем архивы старше $Day дней
Get-ChildItem $pathss | Where-Object { ( $_.LastWriteTime -lt $OldDate ) -and ($_.Extension -eq ".rar")} | Remove-Item