网站开发工资山东网站建设教程 金旭亮
网站开发工资山东,网站建设教程 金旭亮,餐饮营销策划与运营,ps与dw怎么做网站1. 前言
做 Windows 运维的同学都用过批处理(.bat)做自动化,但批处理有明显短板:逻辑复杂、不支持复杂计算、无原生邮件告警、容错性差。
而 PowerShell 作为 Windows 原生的脚本语言,完美解决这些问题: 原生支持 Windows 所有管理接口 轻松实现邮件 / 弹窗告警 支持复…1. 前言做 Windows 运维的同学都用过批处理(.bat)做自动化,但批处理有明显短板:逻辑复杂、不支持复杂计算、无原生邮件告警、容错性差。而 PowerShell 作为 Windows 原生的脚本语言,完美解决这些问题:原生支持 Windows 所有管理接口轻松实现邮件 / 弹窗告警支持复杂逻辑判断和数值计算兼容所有 Windows 系统(Win7 需安装 PowerShell 3.0+)今天分享 3 个我在生产环境长期使用的 PowerShell 自动化脚本,覆盖服务巡检、磁盘监控、日志清理三大核心场景,复制就能用,注释超详细。2. PowerShell 优势(对比批处理)功能批处理(.bat)PowerShell服务管理仅支持基础启动 / 停止支持状态查询、依赖分析、权限控制数值计算仅支持 32 位整数(易溢出)支持超大数值、浮点数、精准计算告警能力无原生支持(需调用第三方)原生支持邮件、弹窗、日志告警容错性出错直接终止支持 try/catch 异常捕获可读性逻辑混乱,注释有限类编程语法,结构清晰3. 实战脚本 1:服务状态巡检(自动启动 + 邮件告警)适用场景定时巡检关键服务(如 SQL Server、IIS、Redis、计划任务),异常自动启动,启动失败则发送邮件告警,避免服务宕机无人知晓。完整脚本(带详细注释)powershell# .SYNOPSIS Windows服务状态巡检脚本(带邮件告警) .AUTHOR 一线Windows运维工程师 .VERSION 4.0(优化版) # # ========== 配置区域(请根据实际环境修改)========== $services = @("Spooler", "SQLBrowser", "MSSQLSERVER", "Schedule") # 要检查的服务名列表 $logDir = "C:\OpsLogs" # 日志存储目录(建议不要用E:,除非确保存在) $smtpServer = "smtp.qq.com" # SMTP服务器地址 $smtpPort = 587 # 端口(465通常带SSL,25不带) $smtpUser = "yourqqemail@qq.com" # 发件邮箱 $smtpPwd = "fdaadadfaf" # 邮箱授权码(非登录密码) $toEmail = "yourqqemail@qq.com" # 收件人邮箱 $enableMail = $true # 是否启用邮件告警 # ================================================= # 初始化:设置编码和错误处理 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $PSDefaultParameterValues['*:Encoding'] = 'utf8' $ErrorActionPreference = 'Stop' # 日志文件路径 $logDate = Get-Date -Format 'yyyyMMdd' $logFile = "ServiceCheck_$logDate.log" $logPath = Join-Path -Path $logDir -ChildPath $logFile # 函数:写入日志(自动添加时间戳) function Write-Log { param([string]$Message, [string]$Color = 'Gray') $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' $logEntry = "$timestamp - $Message" # 写入文件(UTF-8) $logEntry | Out-File -FilePath $logPath -Append -Encoding utf8 # 控制台输出(带颜色) Write-Host $logEntry -ForegroundColor $Color } # 函数:发送邮件 function Send-AlertMail { param( [string]$Subject, [string]$Body ) if (-not $enableMail) { return } try { # 强制使用 TLS 1.2