我写了下面的脚本用来对于超过阈值的磁盘剩余空间,自动弹出窗口用来提醒,但是在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,问题还是依旧。很奇怪。
谢谢了
请用整数值,直接比较吧。
比如我的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比较最准确。