Лучший отвечающий
Мониторинг свободного места на диске PowerShell.

Вопрос
-
Здравствуйте. Не получается отфильтровать не нужные мне элементы. Я хотел бы вывести только те строки в которых свободного места меньше 100 Гб.
Где я ошибаюсь?
Код:
Get-WMIObject Win32_Volume -filter "DriveType=3" -computer (Get-Content D:\Script\computers.txt) | Select SystemName, Caption, @{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Where {($_.Caption -notlike "*Volume*") -and ($_.FreeSpace/1gb -lt 100)} | ft -autosize
Вывод скрипта:
SystemName Caption freespace(GB)
---------- ------- -------------
A07 E:\ 18,9
A07 F:\ 1 425,0
A07 C:\ 21,9
A07 D:\ 666,2
R37 E:\ 98,5
R37 C:\ 116,6- Изменено Василий Киселев 22 мая 2017 г. 15:06
22 мая 2017 г. 15:06
Ответы
-
Фильтр проще делать либо в Get-WmiObject или после него, но не после Select, т.к. получается строка,а не числовой тип и требуется дополнительное преобразование.
1) Get-WMIObject
Get-WMIObject Win32_Volume -filter "DriveType=3 and FreeSpace < '$(100gb)'"
2) После Get-WMIObject | Where
Get-WMIObject Win32_Volume -filter "DriveType=3" -computer (Get-Content D:\Script\computers.txt) | Where {($_.Caption -notlike "*Volume*") -and ($_.FreeSpace/1gb -lt 100)} | Select SystemName, Caption, @{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ft -autosize
3) После Select
Get-WMIObject Win32_Volume -filter "DriveType=3" -computer (Get-Content D:\Script\computers.txt) | Select SystemName, Caption, @{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Where {($_.Caption -notlike "*Volume*") -and ([float]::parse($_."FreeSpace(GB)") -lt 100)} | ft -autosize
- Предложено в качестве ответа Alexander RusinovModerator 22 мая 2017 г. 20:36
- Помечено в качестве ответа Василий Киселев 23 мая 2017 г. 14:35
22 мая 2017 г. 15:46Отвечающий
Все ответы
-
($_.{FreeSpace(GB)} -lt 100)
У вас после селекта параметра фриспейс больше нет, зато есть другой параметр
- Изменено Vector BCOModerator 22 мая 2017 г. 15:23
22 мая 2017 г. 15:19Модератор -
Фильтр проще делать либо в Get-WmiObject или после него, но не после Select, т.к. получается строка,а не числовой тип и требуется дополнительное преобразование.
1) Get-WMIObject
Get-WMIObject Win32_Volume -filter "DriveType=3 and FreeSpace < '$(100gb)'"
2) После Get-WMIObject | Where
Get-WMIObject Win32_Volume -filter "DriveType=3" -computer (Get-Content D:\Script\computers.txt) | Where {($_.Caption -notlike "*Volume*") -and ($_.FreeSpace/1gb -lt 100)} | Select SystemName, Caption, @{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | ft -autosize
3) После Select
Get-WMIObject Win32_Volume -filter "DriveType=3" -computer (Get-Content D:\Script\computers.txt) | Select SystemName, Caption, @{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Where {($_.Caption -notlike "*Volume*") -and ([float]::parse($_."FreeSpace(GB)") -lt 100)} | ft -autosize
- Предложено в качестве ответа Alexander RusinovModerator 22 мая 2017 г. 20:36
- Помечено в качестве ответа Василий Киселев 23 мая 2017 г. 14:35
22 мая 2017 г. 15:46Отвечающий