none
PowerShell에서 각 서브 폴더 별로 사이즈 체크 RRS feed

답변

  • 안녕하십니까? 김도남 님

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “PowerShell에서 각 서브 폴더 별로 사이즈 체크에 대한 답변을 드리겠습니다.

     

     

    Step 1 : 폴더 목록 제공

     

    파일, 폴더 객체의 Length 속성을 이용해서 폴더, 파일 객체를 구분할 수 있습니다.

    아래의 Script $folderPath 변수에 저장되어 있는 경로를 참조 해서 파일, 폴더 목록을 파이프 기호로 제공, Where-Object를 이용해서 Length 조건을 이용해서 폴더 목록만을 출력합니다.

     

    Get-ChildItem -Path $folderPath | ? { $_.Length -eq $null }

     

    Step 2 : 폴더 용량 체크

     

    Measure-Object를 이용해서 한 폴더에 존재하는 파일의 총 용량을 계산할 수 있습니다.


    Get-ChildItem Cmdlet
    Recurse 파라미터를 이용해서 서브 폴더에 존재하는 모든 아이템의 정보를 파이프 기호로 제공, Measure-Object에서 Length 속성을 이용해서 총 용량을 계산을 합니다.

     

    $sum = Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue

     

    Step 3 : 용량 단위 변경

     

    Script를 이용해서 KB 단위를 MB 단위로 변경을 할 수 있습니다.

    Add-Member Cmdlet
    을 이용해서 $bytes변수에 저장되어 있는 KB단위의 값을 MB단위로 변경을 합니다.

     

    $code = { ('{0:0.0} MB' -f ($this/1MB)) }

     

    $result.TotalSize = $bytes | Add-Member -MemberType ScriptMethod -Name toString -Value $code -Force -PassThru

     

     

    Step 4 : Full Script

     

    function Get-FolderSize

    {   

        param(

            [Parameter(Mandatory=$true)]

            $folderPath

        )

       

        trap [Exception]

        {

            Write-Host $_.Exception.Message

            continue;

        }

       

    $code = { ('{0:0.0} MB' -f ($this/1MB)) }

       

        Get-ChildItem -Path $folderPath | ? { $_.Length -eq $null } |

            % { Write-Progress -Activity ' 용량 계산 ...' -Status $_.FullName;

            $sum = Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue

           

            $bytes = $sum.Sum

           

            if($bytes -eq $null) { $bytes = 0 }

           

            $result = 1  | Select-Object -Property Path, TotalSize

            $result.Path = $_.FullName

            $result.TotalSize = $bytes | Add-Member -MemberType ScriptMethod -Name toString -Value $code -Force -PassThru

           

            $result    

           

            }

    }

     

     

    Get-FolderSize "C:\"

     

     

    Step 5 : 확인

     

     

     

     

    참고 자료

     

    Get-ChildItem

    http://technet.microsoft.com/ko-kr/library/dd347686.aspx

     

    Using the Where-Object Cmdlet

    http://technet.microsoft.com/en-us/library/ee177028.aspx

     

    Using the Foreach-Object Cmdlet

    http://technet.microsoft.com/en-us/library/ee176828.aspx

     

    Measure-Object

    http://technet.microsoft.com/ko-kr/library/dd315251.aspx

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    • 답변으로 표시됨 김도남 2011년 11월 10일 목요일 오전 8:50
    2011년 11월 9일 수요일 오전 10:07
    중재자