我研究了谷歌并尝试了几种不同的选项,但没有一个提供我正在寻找的结果。此脚本会生成包含我要查找的数据的电子邮件,但无论阈值如何,它都会发送电子邮件。如果我知道我需要更改什么,以便脚本仅在驱动器低于阈值时发送电子邮件,我将不胜感激。
$freeSpaceThreshold = 5GB
#$computerName = "mycomputer"
$drive = "C:"
$driveData = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter DriveType=3 | Select-Object DeviceID, @{'Name'='Size (GB)'; 'Expression'={[math]::truncate($_.size / 1GB)}}, @{'Name'='Freespace (GB)'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}
if ($driveData.FreeSpace -lt $freeSpaceThreshold)
{
$from = "[email protected]"
$to = "[email protected]"
$subject = "Low Disk Space!"
$body = "Free Space Remaining: " + "$($CDisk.FreeSpace)GB" + " Drive" + $_.deviceid
$smtpServer = "smtp.domain.com"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($from,$to,$subject,$body)
}
5GB
解析为5368709120
相同的值,但以字节而不是千兆字节为单位。当您在比较中使用它时,您需要以与划分比较值相同的方式划分它。例如
($_.FreeSpace / 1GB)
和($freeSpaceThreshold / 1GB )
。或者你根本不划分,因为 freespace 属性也是字节。另外,在格式化之前做你的计算。我会这样做:
然后你会得到正确的结果。
首先,您为什么不使用内置的 PowerShell 邮件 cmdlet 而不是使用.Net 邮件命名空间?
其次,您在正文中使用了未声明的变量,并且在您制作的代码帖子中根本没有传递 $PSItem(又名 $_.)。
最后,你得到了一切,因为这正是你所要求的。
注意点:避免使用带有空格的属性名、文件名(如果您可以控制的话)。一堆引用的东西会让你感到不必要的头痛。
所以,试试这个方法。 (格式只是我的可读习惯。所以,使用你喜欢的。)
根据您对下面的 auth 和 SSL 的评论进行了更新
我终于得到了一个工作脚本。这是我一直在寻找的答案。希望它可以帮助别人。