我想知道是否有一个简单的方法来触发Windows Server 2008上的任何逻辑磁盘分区空间不足时的电子邮件警报。 由于数据库日志文件,我有2台SQL服务器已经接近磁盘空间。
谢谢,瑞安
让Windows Server 2008发送低磁盘空间电子邮件警报的一个简单方法是使用“任务计划程序”和“系统日志”。 如果可用空间低于在HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ DiskSpaceThreshold中指定的百分比,则会在系统日志中logging一个事件,该事件可以触发任务发送电子邮件。
我通过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}}