背景

此脚本,用于检测哪些VPN账户正在登陆连接;
检测频率:1分钟一次

实现

  1. function feishu_alert($info){
  2. $time = (Get-Date).ToShortTimeString()
  3. $par = @{
  4. "msg_type" = "text";
  5. "title" = "VPN在线账号";
  6. "content" = @{
  7. "text" = $info
  8. }
  9. }
  10. $parjson = $par | ConvertTo-Json
  11. #echo $parjson
  12. # 指定hook
  13. $ddhook = "xxxxx"
  14. # 使Json支持中文
  15. $PostData = [System.Text.Encoding]::UTF8.GetBytes($parjson)
  16. $Header = @{"Content-Type" = "application/json;charset=utf-8"}
  17. # UseBasicParsing对URI只进行简单解析,可提高效率
  18. Invoke-WebRequest -Uri $ddhook -Method Post -Body $PostData -Headers $Header -UseBasicParsing
  19. }
  20. $CD=@{Name="持续连接(分钟)";Expression={[math]::Floor(($_.ConnectionDuration)/60)}}
  21. function Get-Active-VPNUser(){
  22. Get-Date
  23. Write-Output "当前共连接VPN用户为 $TotalUser 个"
  24. Get-RemoteAccessConnectionStatistics |
  25. Format-Table UserName, ClientIPAddress, TunnelType, ConnectionStartTime, $CD -AutoSize -Wrap
  26. }
  27. while(1){
  28. $TotalUser=(Get-RemoteAccessConnectionStatistics | Measure-Object).count
  29. # $TotalUser=$((Get-RemoteAccessConnectionStatisticsSummary).TotalConnections)
  30. $date=Get-Date -Format "yyyy年MM月dd日"
  31. Get-Active-VPNUser >> "D:\Logs\VPN\$($date)_Active_VPN_User_10.2.234.17.csv"
  32. #feishu_alert(Get-Active-VPNUser | Out-String)
  33. sleep 60
  34. }