当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:当 Windows 服务器上的磁盘空间不足时提醒我(电子邮件通知)

作者:精品下载站 日期:2024-12-14 07:29:09 浏览:13 分类:玩电脑

PowerShell:当 Windows 服务器上的磁盘空间不足时提醒我(电子邮件通知)


毫无疑问,您应该关注服务器的磁盘空间。我见过很多服务器由于磁盘空间随着时间的推移而崩溃、由于保存越来越多的文件和数据或由于 Windows 更新而崩溃。它们运行着 Exchange、SQL、AD,所有这些都是重要的服务器,上面装有关键软件。如果您当前没有监控磁盘可用空间,并且手头没有像 SCCM 这样的企业工具,那么本文适合您。我们使用 PowerShell 完成这一切,还有什么呢?让我们开始吧。

如前所述,目标是实施监控解决方案来监控所有 Windows 服务器。为了实现这一目标,我们需要做一些事情:

  • 按名称列出的所有 Windows Server(最好具有清理后的 Active Directory 环境,没有孤立的计算机帐户)
  • 使用 Get-WmiObject win32_ologicaldisk 的 foreach 循环从所有服务器获取磁盘可用空间
  • 循环中的 if 语句仅获取磁盘空间不足的服务器的通知
  • 电子邮件配置(也许里面有密码,当然,我会处理这个问题并为您提供解决方案)

目标

定义目标很容易。当其中一台服务器的磁盘空间不足时,我们希望收到一封电子邮件。电子邮件应如下所示:

[玩转系统] PowerShell:当 Windows 服务器上的磁盘空间不足时提醒我(电子邮件通知)

剧本

如果其中一台服务器的磁盘空间低于 10%,以下脚本会向您发出警报。


### Getting all domain-joined Server by Names

$servers=(Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name

### Get only DriveType 3 (Local Disks) foreach Server

ForEach ($s in $servers)

{$Report=Get-WmiObject win32_logicaldisk -ComputerName $s -Filter "Drivetype=3" -ErrorAction SilentlyContinue | Where-Object {($_.freespace/$_.size) -le '0.1'}
$View=($Report.DeviceID -join ",").Replace(":","")
### Send Mail if $Report (<=10%) is true

If ($Report)

{

$EmailTo = "p.gruenauer@domain.xy"
$EmailFrom = "alert@domain.xy"
$user = 'p.gruenauer@domain.xy'
$password = Unprotect-CmsMessage -Path C:\Temp\pw.txt
$Subject = "Alert: PowerShell Storage Report of $s"
$Body = "Server $s storage space has dropped to less than 10 % on $View"
$SMTPServer = "smtp.domain.xy"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($user, $password)
$SMTPClient.Send($SMTPMessage)

}

}

您必须根据需要编辑第 17、18、19、20 和 23 行。

20号线很有趣。要发送电子邮件,您通常必须向电子邮件服务器验证您的帐户。这也意味着密码必须保存在您的脚本中。为了避免这种情况,请按照此处所述加密密码文件 PowerShell:使用证书加密和解密数据(公钥/私钥)

Unprotect-CmsMessage 解密文件的内容。请记住,您希望是唯一拥有私钥的人,因此您是这个星球上唯一可以解密密码文件的人。

如果您喜欢,请将其复制到 PowerShell ISE 会话中并将其另存为 C:\PowerShell\alert_diskspace.ps1。

创建计划任务

最后,我们将把脚本包装成每天运行的计划任务。

下面的行创建一个每天运行一次 C:\PowerShell\alert_diskspace.ps1 的计划任务(上午 08:00)。

您可能想要编辑第 1 行中的文件路径,并且必须修改第 4 行中的 UserId。


$Action=New-ScheduledTaskAction -Execute "powershell" -Argument "C:\PowerShell\alert_diskspace.ps1"
$Trigger=New-ScheduledTaskTrigger -Daily -At 08am
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId "a-d\patrick" -LogonType S4U
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal -Description "Checks free disk space on all Servers. Sends an E-Mail notification if storage drops below 10%"
Register-ScheduledTask -TaskName "Free Disk Space Check" -InputObject $Task -User "a-d\patrick" -Password (Read-Host 'Enter Password') -Force

就是这样。您的服务器受到监控。

下次使用 PowerShell 再见!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯