Ужастик :) Определение свободного места на дисках общих папок

Сейчас в чате всплыла задачка – как бы посмотреть свободное место на дисках соответствующих общим папкам. Причем метод через WMI показался слишком медленным, решать задачу средствами .Net было лень (так как навскидку не помню нужных классов, пришлось бы искать в msdn), ну а использование шустрейшего WinAPI требовало слишком много строк🙂 Поэтому я решил пойти ужасно не красивым, зато действенным способом – разобрать текстовый вывод старых .exe утилит использующих API🙂 Парсер для двух утилит с совершенно разным форматом вывода удалось набросать достаточно быстро🙂 Причем выводит он уже не просто текст, а полноценные объекты, в лучших традициях PowerShell:

net share |where{$_ -match '^(\S+)\s+([a-z]:)\\'}|            
select @{name="Share";expression={$matches[1]}},             
    @{n="Disk";e={$matches[2]}},             
    @{n="FreeBytes";e={(fsutil volume diskfree $matches[2])[0] -replace '^.+: '}}
Опубликовано в Command line parsing. Метки: , , . 2 комментария »

комментария 2 to “Ужастик :) Определение свободного места на дисках общих папок”

  1. Sergey Says:

    Вась, я таки испугался и решил что WMI не так страшен:

    function Get-FreeSpaceOnShare ([string]$ComputerName, [string]$ShareName)
    {
    $DriveLetterOfShare = (Get-WmiObject -Class Win32_Share -ComputerName $ComputerName -Filter «Name=’$ShareName'»).path | Split-Path -qualifier
    $FreeSpaceOnShare = (Get-WmiObject -Class Win32_LogicalDisk -ComputerName $ComputerName -Filter «DeviceID=’$DriveLetterOfShare'»).FreeSpace
    return $FreeSpaceOnShare
    }

  2. Xaegr Says:

    Никто не говорил что он страшен🙂 Он просто … «не шустрый»🙂


Обсуждение закрыто.

%d такие блоггеры, как: