Попытка реализовать утверждение if в процентах - PullRequest
0 голосов
/ 03 декабря 2018

Я строю сценарий, но не могу его завершить, потому что я изо всех сил пытаюсь заставить работать оператор if.

$freespace = [math]::round((Get-WmiObject Win32_Volume -Filter "Label='User Disk'" | Foreach-Object {$_.FreeSpace})/ 1MB)
$volumespace = [math]::round((Get-WmiObject Win32_Volume -Filter "Label='User Disk'" | Foreach-Object {$_.Capacity})/ 1MB)
$usedspace=$volumespace-$freespace

Write-Host
"Used Space: $usedspace"
"Free Space: $freespace"
"Total Space Assigned: $volumespace"

if ($freespace -lt 5% $volumespace)

Оператор if должен вычисляться следующим образом (псевдокод):

if $freespace is less than 5% of the $volumespace

тогда моя команда отправки почты привязывается к нему.

Я не знаю, как сделать этот расчет, несмотря на борьбу в течение нескольких часов.

1 Ответ

0 голосов
/ 03 декабря 2018

$freeSpace -lt $volumeSpace * .05 - это искомое условие:

  • -lt - оператор меньше чем в PowerShells (< на других языках)
  • десятичная дробь .5 (0.05) представляет 5% и имеет тип [double], такой же, как ваши переменные.

Следующая упрощенная версия вашего кода демонстрирует использование переменной хранить проценты:

$freeSpace, $volumeSpace = Get-WmiObject Win32_Volume -Filter "Label='User Disk'" | 
  ForEach-Object { [math]::Round($_.FreeSpace / 1mb), [math]::Round($_.Capacity / 1mb) }

$usedSpace = $volumeSpace - $freeSpace

$thresholdPercentage = 5

# Send email if there's less than 5% free space.
# Note the need to divide the percentage number by 100.
# Alternatively, define $thresholdPercentage as 0.05 above.
if ($freeSpace -lt $volumeSpace * ($thresholdPercentage / 100)) {
   # Send email
}
...