sergey vasin

The IT blog

Weekend Scripter: Сортируем каталоги по размеру – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson показывает как использовать Windows PowerShell 3.0 для сортировки каталогов по размеру.

Microsoft Scripting Guy, Ed Wilson на связи. Интересно, как некоторые вещи имеют обыкновение повторяться. Я знаю, что я писал скрипты для сортировки каталогов по размеру множество раз на разных языках. Но недавно я наткнулся на функцию, написанную Jeff Wouters, и это подтолкнуло меня написать ее еще раз.

Все таки это уикенд, а по уикендам я люблю играться в Windows PowerShell (мой друг Don Jones ведет колонку PowerShell with a purpose – когда я работаю с PowerShell по выходным, это можно было бы назвать PowerShell without a purpose, но я не стану посягать на чужие названия).

Используем FileSystemObject для определения размера каталогов

Я знал это, но спустя некоторое время вещи забываются. Я написал две книги по VBScript (если считать книгу по WMI, то три) я и точно должен был это знать. И это было забытым до тех пор, пока я не увидел скрипт Джеффа в его блоге.

COM-объект Scripting.FileSystemObject возвращает размер каталога. Поэтому мне нужно воспользоваться командлетом New–Object с параметром –comobject для создания экземпляра объекта filesystemobject.

$fso = New-Object -ComObject scripting.filesystemobject

Следующее, что мне нужно сделать, это получить список путей к каталогам, информацию о которых мне нужно получить. Для этого я воспользуюсь новым синтаксисом Windows PowerShell 3.0для получения только каталогов. Так как кроме каталогов мне нужны и их подкаталоги, я укажу параметр –Recurse.

Foreach($folder in (Get-ChildItem $path -Directory -Recurse))

Я создам пользовательский объект, обладающий двумя свойствами. Первое свойство – это путь к каталогу (назовем его name), и второе – это размер каталога в мегабайтах (назовем его size). Метод GetFolder объекта FileSystemObject требует указания строки, представляющей их себя путь к каталогу. Для этого я использую свойство FullName объекта, полученного при помощи командлета Get-ChildItem, и превращу его в строку посредством метода ToString.

Затем я получу путь из объекта каталога, возвращенного методом GetFolder. То же самое я сделаю для получения размера каталога – я возьму его из свойства size. Я переведу значение в мегабайты, используя константу MB. Самый простой способ получить целое число, это перевести результат в integer, что я и сделаю при помощи ускорителя [int].

New-Object -TypeName psobject -Property @{

name=$fso.GetFolder($folder.FullName.tostring()).path;

size=[int]($fso.GetFolder($folder.FullName.ToString()).size /1MB)}

Последнее, что я сделаю – отсортирую каталоги по размеру. Я также отфильтрую результаты для получения только тех каталогов, размер которых превышает 1000 Mb.

$folders | sort size -Descending | ? size -gt 1000

Полный текст скрипта приведен ниже.

#requires -version 3.0

$path = «c:\data»

$fso = New-Object -ComObject scripting.filesystemobject

$folders = Foreach($folder in (Get-ChildItem $path -Directory -Recurse))

{

New-Object -TypeName psobject -Property @{

name=$fso.getFolder($folder.fullname.tostring()).path;

size=[int]($fso.GetFolder($folder.FullName.ToString()).size /1MB)}

}

$folders | sort size -Descending | ? size -gt 1000

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/05/weekend-scripter-sorting-folders-by-size.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Январь 7, 2013 в 13:50

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s