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

如何用PowerShell仅在启动IIS应用程序池时发送邮件?

解决IIS应用池自动重启后按需发送邮件的方案

核心思路

先筛选出所有处于停止状态的应用池并保存到变量,通过判断变量是否为空来决定是否执行重启和发送邮件,同时从变量中提取应用池名称用于邮件内容。

修改后的完整脚本

# 显式导入IIS管理模块(任务计划环境中可能需要)
Import-Module WebAdministration

# 获取所有处于停止状态的应用池
$stoppedAppPools = Get-ChildItem IIS:\AppPools | Where-Object {$_.State -eq "Stopped"}

# 判断是否有需要启动的应用池
if ($stoppedAppPools.Count -gt 0) {
    # 重启筛选出的应用池
    $stoppedAppPools | Restart-WebAppPool

    # 整理应用池名称列表,用换行分隔
    $appPoolList = $stoppedAppPools.Name -join "`n"

    # 配置邮件参数(根据你的实际环境修改)
    $mailSettings = @{
        From       = "monitor@yourdomain.com"
        To         = "admin@yourdomain.com"
        Subject    = "【自动通知】已启动停止的IIS应用池"
        Body       = "检测到以下IIS应用池处于停止状态,已自动启动:`n`n$appPoolList"
        SmtpServer = "smtp.yourdomain.com"
        # 如需SSL认证或指定端口,添加以下参数
        # Port       = 587
        # UseSsl     = $true
        # Credential = Get-Credential # 或预先配置的凭据对象
    }

    # 发送邮件
    Send-MailMessage @mailSettings
}

关键说明

  • 筛选逻辑优化:将原脚本的$_.State -ne "Started"改为$_.State -eq "Stopped",避免误处理正在启动/停止中的应用池,更精准。
  • 条件触发邮件:通过$stoppedAppPools.Count -gt 0判断是否有需要处理的应用池,只有在实际启动了应用池时才发送邮件。
  • 邮件内容整理:用-join "n"`将应用池名称拼接为换行分隔的列表,让邮件内容更易读。
  • 任务计划注意事项:确保执行脚本的账户拥有IIS应用池管理权限,且能访问指定的SMTP服务器;若任务计划中模块加载失败,务必保留Import-Module WebAdministration语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:35:22