You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本检测Azure中匹配指定名称的运行中数据库并实现每日通知?

检查Azure中运行状态的指定名称模式数据库并发送通知

针对你需要监控以_copy结尾的运行中Azure SQL数据库并发送通知的需求,以下是两种实用的脚本方案,配合自动化工具可实现每日检查:

PowerShell 脚本(适配Azure Automation)

这个脚本可以遍历指定订阅下的所有SQL数据库,筛选出名称以_copy结尾且状态为Online的实例,然后发送邮件提醒。

完整脚本

# 通过Run As账户登录Azure(Azure Automation环境专用)
Connect-AzAccount -Identity

# 切换到目标订阅
$subscriptionId = "你的订阅ID"
Set-AzContext -Subscription $subscriptionId

# 筛选符合条件的数据库
$copyDatabases = Get-AzSqlDatabase | Where-Object { 
    $_.Name -like "*_copy" -and $_.Status -eq "Online" 
}

# 构建通知内容
$subject = if ($copyDatabases.Count -gt 0) {
    "⚠️ 存在运行状态的_copy后缀数据库"
} else {
    "✅ 无运行状态的_copy后缀数据库"
}

$body = if ($copyDatabases.Count -gt 0) {
    "需要清理的运行中数据库列表:`n`n" + 
    ($copyDatabases | ForEach-Object { "服务器: $($_.ServerName) | 数据库名: $($_.Name)" }) -join "`n"
} else {
    "当前没有以_copy结尾的运行中数据库,无需操作。"
}

# 发送邮件(以SendGrid为例,可替换为其他邮件服务)
$sendGridApiKey = "你的SendGrid API密钥"
$from = "alerts@yourdomain.com"
$to = "admin@yourdomain.com"

Send-MailMessage -From $from -To $to -Subject $subject -Body $body `
    -SmtpServer "smtp.sendgrid.net" -Port 587 -UseSsl `
    -Credential (New-Object System.Management.Automation.PSCredential "apikey", (ConvertTo-SecureString $sendGridApiKey -AsPlainText -Force))

自动化配置步骤

  1. 在Azure门户创建Automation账户,启用Run As账户。
  2. 创建新的PowerShell Runbook,粘贴上述脚本,替换占位符(订阅ID、API密钥、邮箱地址)。
  3. 给Run As账户分配SQL Database Reader角色,确保能读取数据库信息。
  4. 添加SendGrid模块到Automation账户(如果用其他邮件服务,需安装对应模块)。
  5. 设置每日触发计划,比如每天凌晨执行一次。

Azure CLI 脚本(适合本地/CI/CD环境)

如果偏好使用Azure CLI,这个脚本可以快速查询目标数据库,适合本地定时任务或Azure DevOps流水线。

完整脚本

# 服务主体登录(CI/CD环境用,本地运行可替换为az login)
az login --service-principal -u <你的客户端ID> -p <你的客户端密钥> --tenant <你的租户ID>

# 切换到目标订阅
az account set --subscription "你的订阅ID"

# 查询符合条件的数据库
copy_dbs=$(az sql db list --query "[?ends_with(name, '_copy') && status=='Online']" -o table)

# 生成通知内容
if [[ -n "$copy_dbs" && "$copy_dbs" != "No entries found" ]]; then
    subject="⚠️ 发现运行状态的_copy后缀数据库"
    body="以下数据库仍在运行,请及时清理:`n`n$copy_dbs"
else
    subject="✅ 无运行状态的_copy后缀数据库"
    body="当前没有需要清理的_copy结尾数据库。"
fi

# 发送邮件(以mailx为例,根据操作系统调整命令)
echo -e "$body" | mailx -s "$subject" admin@yourdomain.com

定时运行设置

  • Linux/macOS:用cron添加每日任务,比如0 1 * * * /path/to/your/script.sh。
  • Azure DevOps:创建新流水线,设置每日触发计划,将脚本作为任务执行。

关键注意事项

  • 执行脚本的账户必须拥有Microsoft.Sql/servers/databases/read权限,否则无法查询数据库信息。
  • 邮件服务可灵活替换,比如用Azure通信服务、Exchange Online,只需修改发送邮件的代码段。
  • 若需检查多个订阅,可在脚本中添加循环遍历所有订阅的逻辑。

内容的提问来源于stack exchange,提问作者Mark Cooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:35:41