我使用的是 Windows 10 Enterprise 1709 和 PowerShell 版本 5.0。我有下面这个我在网上找到的 PowerShell 脚本。它可以工作,但我不明白代码中的一行在做什么,所以我可以决定如何编辑它以完成我需要做的事情。此外,即使驱动器不低于最低阈值,它也会发送电子邮件。我想了解这行代码并修复它,以便仅在驱动器低于最低阈值时发送电子邮件警报。$freeSpaceGB = [Math]::Round([float]$disk.FreeSpace / 1073741824);
这行$computer = $computer.toupper();
完整代码如下:
$minGbThreshold = 50GB
$computers = $env:COMPUTERNAME
$smtpAddress = "smtp.anydomain.com"
$toAddress = "[email protected]"
$fromAddress = "[email protected]"
foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3";
$computer = $computer.toupper();
$deviceID = $disk.DeviceID;
foreach($disk in $disks)
{
$freeSpaceGB = [Math]::Round([float]$disk.FreeSpace / 1073741824);
if($freeSpaceGB -lt $minGbThreshold)
{
$smtp = New-Object Net.Mail.SmtpClient($smtpAddress)
$msg = New-Object Net.Mail.MailMessage
$msg.To.Add($toAddress)
$msg.From = $fromAddress
$msg.Subject = “Diskspace below threshold ” + $computer + "\" + $disk.DeviceId
$msg.Body = $computer + "\" + $disk.DeviceId + " " + $freeSpaceGB + "GB Remaining";
$smtp.Send($msg)
}
}
}
答案1
$freeSpaceGB = [Math]::Round([float]$disk.FreeSpace / 1073741824);
确定 HDD 的可用存储空间量,以千兆字节 (GB) 为单位,精确到 GB。
1,073,741,824 字节是1.073741824 千兆字节这是 Windows 用来表示单个千兆字节 (GB) 的字节数。
2^30 = 1,073,741,824
吉比字节是数字信息单位字节的倍数。二进制前缀 gibi 表示 230,因此 1 吉比字节等于 1073741824 字节。
来源:吉比特
$计算机 = $计算机.toupper();
只需将计算机名称的大小写更改为全部大写。
我仍然需要了解为什么即使磁盘空间不低于最低要求,我仍然会收到电子邮件
$minGbThreshold = 50GB
$freeSpaceGB = [Math]::Round([float]$disk.FreeSpace / 1073741824);
的整数值57
确实小于字符串的字母数字值50GB
。
解释:
61,717,860,352 / 1,073,741,824 = 57.4792
57.4792将向下舍入为整数值57
原始代码片段实际上指示了的正确值$minGbThreshold
。
$minGbThreshold = 25