在Windows Server 2008上设置低磁盘空间警报

我想知道是否有一个简单的方法来触发Windows Server 2008上的任何逻辑磁盘分区空间不足时的电子邮件警报。 由于数据库日志文件,我有2台SQL服务器已经接近磁盘空间。

谢谢,瑞安

让Windows Server 2008发送低磁盘空间电子邮件警报的一个简单方法是使用“任务计划程序”和“系统日志”。 如果可用空间低于在HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ DiskSpaceThreshold中指定的百分比,则会在系统日志中logging一个事件,该事件可以触发任务发送电子邮件。

  1. 打开任务计划程序并创build一个新的任务。
  2. input任务的名称,select“运行用户是否login”,然后选中“不要存储密码”。
  3. 在“触发器”选项卡上添加一个新的触发器。
  4. 在“开始任务”框中select“在一个事件上”。
  5. 将日志设置为“系统”,将源设置为“srv”,将事件ID设置为“2013”​​。
  6. 在“操作”选项卡上添加一个新操作。
  7. 将操作设置为“发送电子邮件”,并适当填写其余设置。
  8. 要configuration系统日志中logging磁盘空间不足事件的时间,请打开registry编辑器,导航到HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters并添加一个名为“DiskSpaceThreshold”的DWORD值,并将其设置为所需的百分比。 当条目不存在时,默认值是10。

我通过snmp向我的(单独的)nagios实例添加了磁盘空间监视。

为什么不每天运行一个PowerShell脚本作为日程安排任务? 如果脚本发现磁盘的可用空间低于10%,它会向您发送电子邮件或通知。

这里是检查磁盘的可用空间的示例代码:

Get-Content ForEach-Object {$ ; Get-WMIObject -computername $ Win32_LogicalDisk -filter“DriveType = 3”| ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}

由于PowerShell语法不正确,这两个示例都不起作用。 以下代码列出了当前主机的卷大小(使用PowerShell 5.0):

Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } 

以下代码列出了server.txt中列出的主机的卷大小:

 Get-Content server.txt | %{ Get-WMIObject –computername $_ Win32_LogicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } } 

边注

请注意,外部占位符$_列举服务器地址,而内部占位符$_列举设备。 对于PowerShell新手来说,这是一个频繁的问题。 如果你想在内部循环中使用服务器地址,你必须把它分配给外部循环中的一个新variables。

这里使用的论坛软件是有缺陷的。 在后期预览中,即使没有作为代码转义,它也会正确显示$_ $_ 。 但最后的post删除了下划线,从而使PowerShell示例不正确。

我已经修复了脚本。 只需创build一个名为server.txt的文本文件,并包含IP地址或服务器名称,然后就可以执行下面的脚本

Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter“DriveType = 3”| ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}

问候,路易斯。

Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter“DriveType = 3”| forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}