Тест Powershell для свободной емкости на C: / - PullRequest
0 голосов
/ 07 апреля 2020

Здравствуйте, я не продвинутый в Powershell. Я пытаюсь проверить, если диск C: / емкость меньше 2 ГБ с помощью этого сценария:

$date = get-date
$computer = $env:computername
$minspace = 2 # minimal space in GB
$disk = ([wmi]"\\$computer\root\cimv2:Win32_logicalDisk.DeviceID='c:'")
$free = "{0:#.0}" -f ($disk.FreeSpace/1GB)
$used = "{0:#.0}" -f ($disk.Size/1GB)

if($free -lt $minspace){
     Write-Host "$free is less than $minspace"
}

Но результат неверный. 16,8 меньше 2

значения являются строками. Но когда я пытаюсь преобразовать его в число, я получаю 168 для $free

, как проверить, меньше ли дискового пространства меньше 2 ГБ?

1 Ответ

0 голосов
/ 07 апреля 2020

Чтобы ответить на ваш вопрос:

Проблема, с которой вы сталкиваетесь, заключается в том, что вы сравниваете строку с целым числом в вашем if ($free -lt $minspace) {}, в этом сравнении $ free - это строка (потому что применяемого вами форматирования), а $ minspace является целым числом.

Если вы хотите проверить место на диске менее 2 ГБ, проверьте его с помощью чисел:

if ($disk.FreeSpace -lt 2GB) {
    ## Do something when below 2GB limit
}

, если вы введете из 2 ГБ и нажмите клавишу ввода в приглашении PowerShell, вы увидите, что PowerShell преобразует его в целое число: 2147483648

Используйте форматирование строки (с -f), если вы хотите, чтобы числа выглядели более человечно. читаемые, но оставьте их как числа (int, float и т. д. c.), если вы хотите провести численное сравнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...