Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
God3361
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
1

Определить и вывести диск который имеет наибольшее количество свободного места

10.03.2018, 15:28. Просмотров 979. Ответов 6
Метки нет (Все метки)

Добрый день, у меня возникла проблема с powershell нужно написать как я понимаю скрипт маленький, но я в это деле мягко говоря не очень..
PowerShell
1
Get-PSDrive | Where-Object { $_.Free -AND $_.Provider.Name -eq "FileSystem" }
Тут я получаю все диски которые имеют свободное место и сортирую их, но вот как написать что бы из них выбрало самое меньшее? Если что заранее извиняюсь за глупый вопрос.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2018, 15:28
Ответы с готовыми решениями:

Определить размер диска и количество свободного места
Как определить полный размер и размер свободного пространства диска?(lazarus)

Определить количество свободного места в корневом каталоге диска
Преподаватель дал задание написать программу, которая находит свободное место в корневом каталоге...

Модуль DOS - Определить количество свободного места на съёмном диске
Определить количество свободного места на съёмном диске, если имеется больше 10 Мбайт свободного...

Определить общее количество ОЗУ и свободного места на системном диске
Доброго времени суток. Нужно определить общее количество оперативной памяти и свободного места...

«Модуль DOS».Определить количество свободного места на съемном диске.
Определить количество свободного места на съемном диске, если больше 500 Кбайт, вывести в центре...

6
greg zakharov
Нарушитель
2302 / 955 / 266
Регистрация: 07.05.2015
Сообщений: 1,874
10.03.2018, 16:09 2
Лучший ответ Сообщение было отмечено God3361 как решение

Решение

Например:
PowerShell
1
2
3
4
5
6
7
8
9
10
# через Get-PSDrive
(Get-PSDrive -PSProvider FileSystem | sort 'Free (GB)')[0].Root
 
# через WMI
(gwmi -q 'select * from win32_logicaldisk where drivetype=3' | sort freespace)[-1].deviceid
 
# через тип DriveInfo
([IO.DriveInfo]::GetDrives() | sort AvailableFreeSpace)[-1].Name
 
# и так далее...
1
God3361
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
10.03.2018, 16:19  [ТС] 3
greg zakharov, спасибо
можете дать совет, какую литературу стоит почитать что бы писать такие базовые скрипты?

Добавлено через 3 минуты
greg zakharov, и еще такой вопрос что значит drivetype=3 и [-1].deviceid ?
0
greg zakharov
Нарушитель
2302 / 955 / 266
Регистрация: 07.05.2015
Сообщений: 1,874
10.03.2018, 16:31 4
Цитата Сообщение от God3361
какую литературу стоит почитать что бы писать такие базовые скрипты?
Есть встроенная справка - Get-Help или man, - на счет книг... все они по своей сути являются вольным пересказом встроенной справки.
Цитата Сообщение от God3361
и еще такой вопрос что значит drivetype=3 и [-1].deviceid?
Как подсказывает логика (и Кэп), drivetype=3 - тип раздела (3 = Fixed), [-1] - последний элемент коллекции, а .deviceid - обращение к свойству DeviceId, ранее выбранного элемента.
1
God3361
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
10.03.2018, 17:20  [ТС] 5
greg zakharov, понимаю что крыво написано до ужаса, но хотел попробовать так, понимаю что не хватает логики

PowerShell
1
2
3
4
5
6
7
8
9
$arr = @(gwmi -q 'select FreeSpace from win32_logicaldisk where drivetype=3')
$max = @()
for ($i -eq 0; $i -lt $arr.FreeSpace[$i]; $i++ ){
if ($arr.FreeSpace[$i] -gt $max) {
        $max -eq $arr[$i]
        
    }
}
return $max
выводит ошибку, которую не могу исправить :
Сбой операции индексирования, индекс массива вычислен как NULL.
E:\new.ps1:3 знак:16
+ for ($i -eq 0; $i -lt $arr.FreeSpace[$i]; $i++ ) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex
0
greg zakharov
Нарушитель
2302 / 955 / 266
Регистрация: 07.05.2015
Сообщений: 1,874
10.03.2018, 18:10 6
Лучший ответ Сообщение было отмечено God3361 как решение

Решение

PowerShell
1
2
3
4
5
$arr = gwmi -q 'select freespace from win32_logicaldisk where drivetype=3'
for ($max, $i = 0, 0; $i -lt $arr.Length; $i++) {
   if ($a[$i].FreeSpace -gt $max) { $max = $a[$i].FreeSpace }
}
$max
PS. Хотя непонятно для чего все так усложнять.
2
God3361
0 / 0 / 1
Регистрация: 24.06.2016
Сообщений: 24
10.03.2018, 18:30  [ТС] 7
такgreg zakharov, спасибо, да ради интереса и получения опыта ...)
0
10.03.2018, 18:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2018, 18:30

Определить, какой из элементов в массиве имеет наибольшее количество делителей и вывести все его делители на экран
Определить, какой из элементов в массиве А(N) имеет наибольшее количество делителей и вывести все...

Выбрать тот файл, который имеет наибольшее количество строк
Из группы файлов, содержащих число с суммой цифр 27, выбрать тот файл, который имеет наибольшее...

Добавить свободного места на один диск с другого
Винда сожрала всё место на C но на Е у меня есть ещё свободное место. Можно Partition Magic или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.