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

PowerShell: Identify if disk usage is more than 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,VolumeName,$size,$freeSpace,$freeSpacePercent