AI绘图@一键安装
这个脚本能够实现对远程服务器SSH连接状态的监听和QQ邮箱告警,开发背景用来监听使用小米球做内网穿透带来的不稳定问题。
执行脚本
# 设置变量
# 发件邮箱
$from = "****@qq.com"
# 收件邮箱
$to = "****@qq.com"
$subject = "SSH 连接状态检测报告"
$smtpPort = 587
# 发件邮箱名称
$username = "****@qq.com"
# 发件邮箱密码
$password = "sgnbiksiqdtcbaff"
# 定义发送邮件的函数
function Send-MailMessageWithFormattedBody {
# 接收参数
param (
[Parameter(Mandatory=$true)][string]$from,
[Parameter(Mandatory=$true)][string]$to,
[Parameter(Mandatory=$true)][string]$subject,
[Parameter(Mandatory=$true)][string]$body
)
# 定义 HTML 模板
$htmlTemplate = @"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SSH 连接状态检测报告</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
border-bottom: 1px solid #ddd;
}
th {
background-color: #4CAF50;
color: white;
}
.status-ok {
font-weight: bold;
color: #4CAF50;
}
.status-failed {
font-weight: bold;
color: #f44336;
}
</style>
</head>
<body>
<h1>SSH 连接状态检测报告</h1>
<p>$body</p>
</body>
</html>
"@
# 发送邮件
$mailMessage = New-Object System.Net.Mail.MailMessage $from, $to, $subject,$htmlTemplate
$mailMessage.IsBodyHtml = $true
# $mailMessage.Body = $htmlTemplate
# $mailMessage.BodyEncoding = [System.Text.Encoding]::UTF8
$smtpClient = New-Object System.Net.Mail.SmtpClient smtp.qq.com, $smtpPort
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$smtpClient.Send($mailMessage)
}
# 循环执行
while ($true) {
# 检测 SSH 连接状态
$sshStatus = Test-NetConnection -ComputerName hc701qrunjac.ngrok.xiaomiqiu123.top -Port 22 | Select-Object -ExpandProperty TcpTestSucceeded
# 获取系统信息
$osVersion = Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption, CSDVersion, OSArchitecture
$currentUser = Get-WmiObject -Class Win32_ComputerSystem | Select-Object UserName
$networkAdapter = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object { $_.DeviceID -eq "1" } | Select-Object NetConnectionStatus
$graphicsCard = Get-WmiObject -Class Win32_VideoController | Select-Object Name
$memory = Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVisibleMemorySize
# 根据 SSH 连接状态生成报告内容
if ($sshStatus) {
$sshStatusText = "<span class='status-ok'>已连接</span>"
}
else {
$sshStatusText = "<span class='status-failed'>未连接</span>"
}
$reportBody = @"
<table>
<tr><th>系统用户名</th><td>$($currentUser.UserName)</td></tr>
<tr><th>操作系统</th><td>$($osVersion.Caption) $($osVersion.OSArchitecture) $($osVersion.CSDVersion)</td></tr>
<tr><th>显卡信息</th><td>$($graphicsCard.Name)</td></tr>
<tr><th>网络连接状态</th><td>$($networkAdapter.NetConnectionStatus)</td></tr>
<tr><th>内存信息</th><td>$($memory.TotalVisibleMemorySize) KB</td></tr>
<tr><th>SSH 连接状态</th><td>$sshStatusText</td></tr>
</table>
"@
# 发送邮件
Send-MailMessageWithFormattedBody -from $from -to $to -subject $subject -body $reportBody
# 等待 10 分钟
Start-Sleep -Seconds 600
}
使用步骤:
- 将上述脚本保存为1.ps1文件,GBK编码;
- 使用PowerShell终端执行该文件即可;