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
我正在尝试获取所有磁盘的磁盘使用情况,然后在任何磁盘的磁盘使用情况超过 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