Powershell 脚本-仅当驱动器空间低于 MinThreshold 时发送电子邮件

Powershell 脚本-仅当驱动器空间低于 MinThreshold 时发送电子邮件

我使用的是 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

来源:Windows Server 的自动磁盘空间警报

相关内容