微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerShell:确定磁盘使用率是否超过 80%

如何解决PowerShell:确定磁盘使用率是否超过 80%

我正在尝试从所有磁盘获取磁盘使用情况,然后在任何磁盘的磁盘使用率超过 80% 时发送电子邮件。使用现有文章,我想出了以下内容,但无法过滤掉使用率超过 80% 的磁盘。有好心人能指导我吗? TIA

$size = @{label="Size(GB)";expression={[int]($_.Size/1GB)}}

$freeSpace = @{label="FreeSpace(GB)";expression={[int]($_.FreeSpace/1GB)}}

$freeSpacePercent = @{label="FreeSpace(%)";expression={[int]($_.FreeSpace/$_.Size * 100)}}

Get-CimInstance -ClassName Win32_Logicaldisk | 
Select-Object -Property deviceid,VolumeName,$size,$freeSpace,$freeSpacePercent

解决方法

只需添加一个 Where-Object{},例如:

$size             = @{label = "Size(GB)"; expression = {[int]($_.Size/1GB)}}
$freeSpace        = @{label = "FreeSpace(GB)"; expression = {[int]($_.FreeSpace/1GB)}}
$freeSpacePercent = @{label = "FreeSpace(%)"; expression = {[int]($_.FreeSpace/$_.Size * 100)}}

Get-CimInstance -ClassName Win32_LogicalDisk | 
Select-Object -Property DeviceID,VolumeName,$size,$freeSpace,$freeSpacePercent |
Where-Object{ $_."FreeSpace(%)" -le 20 }

请注意,它不到 20%。还要注意引号,因为您在属性名称中使用了特殊字符。

此外,您正在投射到一个 [Int],这将使银行家非常接近整数。这可能是故意的,但是当我做这种事情时,我喜欢使用 `[Math]::Round() 函数。你可以改变你的表达来获得:

$size             = @{label="Size(GB)"; expression = { [Math]::Round( ($_.Size/1GB),2 ) }}
$freeSpace        = @{label="FreeSpace(GB)"; expression = { [Math]::Round( ($_.FreeSpace/1GB),2 ) }}
$freeSpacePercent = @{label="FreeSpace(%)"; expression = { [Math]::Round( ($_.FreeSpace/$_.Size * 100),2 ) }}

Get-CimInstance -ClassName Win32_LogicalDisk | 
Select-Object -Property DeviceID,$freeSpacePercent 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。