如何设置磁盘剩余空间阈值并提醒


PowerShell交流中心如何设置磁盘剩余空间阈值并提醒
0
daniu asked 9 年 ago

我写了下面的脚本用来对于超过阈值的磁盘剩余空间,自动弹出窗口用来提醒,但是在if语句进行判断的时候出现些问题,例如,D盘剩余空间9G,我设置的阈值时15G,当剩余空间小于15G时,自动弹出提醒窗口,但是实际情况是窗口并未弹出。我已经检查了,问题处在if语句的比较部分,但是看着没有什么问题额。

三个分区的剩余空间为,这是脚本中增加了一句导出的,和实际相符

30.66
9.58
20.03

脚本如下:

$free=Get-WmiObject -comp OA03200A win32_logicaldisk |?{$_.DriveType -eq 3} | select PSComputerName,DeviceID,VolumeName,FileSystem,@{Expression={“{0:N2}” -f ($_.size)};Label=”TotalSize”},@{Expression={“{0:N2}” -f ($_.FreeSpace/1GB)+” GB”};Label=”FreeSpace”}
foreach ($c in $free.freespace)
{
$c.Substring(0,$c.length-3) | Out-File F:\11122.txt -append
$d=$c.Substring(0,$c.length-3)

if ($d -le “15”)
{
[System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
[Windows.Forms.MessageBox]::Show(“Test message”, “test”, [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
}

}

运行上面的脚本不弹出任何窗口。但是如果改成-ge 15,则会弹出三个窗口,但实际情况是D盘只有9.58G。

一开始我以为是数字后面带GB导致比较大小的问题,然后我用substring对字符串进行截取,去掉了GB,问题还是依旧。很奇怪。

谢谢了

0 Answers
1
Mooser Lee 管理员 answered 9 年 ago

请用整数值,直接比较吧。
比如我的C盘剩余空间在资源管理器中显示为24.6GB。 我用WMI获取的值为:

PS> (Get-WmiObject -Class win32_logicaldisk)[0].FreeSpace
26467799040

如果我要和25GB直接比较,见证PowerShell强大的地方到了:


PS> (Get-WmiObject -Class win32_logicaldisk)[0].FreeSpace/1gb -gt 24
True
PS> (Get-WmiObject -Class win32_logicaldisk)[0].FreeSpace/1gb -gt 26.7
False
PS> (Get-WmiObject -Class win32_logicaldisk)[0].FreeSpace -gt 24GB
True
PS> (Get-WmiObject -Class win32_logicaldisk)[0].FreeSpace -gt 24.67GB
False

不需要转换直接拿win32_logicaldisk对象的FreeSpace比较最准确