none
PowerShell에서 File 관리 RRS feed

답변

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

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

     

    문의 하신 “PowerShell에서 File 관리에 대한 답변을 드리겠습니다.

     

    Step 1 : File 필터

    길이가 0이 아닌 Item의 정보를 제공을 합니다. 보통 File Length의 값은 1이상 이므로 파일 정보를 제공을 합니다.

    Get-ChildItem $env:windir | ? { $_.Length -ne $null }

     

    Step 2 : 폴더 필터

    길이가 0 Item 정보를 제공을 합니다. 폴더는 Length 값이 이므로  폴더 정보를 제공을 합니다.

    Get-ChildItem $env:windir | ? { $_.Length -eq $null }

     

     

    Step 3 : 폴더 비우기

    30일 이상 File을 삭제합니다.

    function Clear-TempFolder

    {

     

        $cutoff = (Get-Date) - (New-TimeSpan -Days 30)

     

     

        $before = (Get-ChildItem $env:temp | Measure-Object Length -Sum).Sum

     

     

        

        Get-ChildItem $env:temp |                           

       

        Where-Object { $_.Length -ne $null } |            

     

        Where-Object { $_.LastWriteTime -lt $cutoff } |   

     

        Remove-Item -Force -ErrorAction SilentlyContinue 

     

     

        $after = (Get-ChildItem $env:temp | Measure-Object Length -Sum).Sum

     

        '{0:0.00} MB disk space' -f (($before-$after)/1MB)

     

    }

     

     

    Clear-TempFolder

     

     

    Step 4 : 폴더 및 파일 확인

    Path 인자값 경로가 존재하는 지 확인 합니다.

    Test-Path –Path “C:\TestFoler” -IsValid

     

     

    Step 5 : 폴더 사이즈

    폴더의 용량 정보를 제공을 합니다. 루트 폴더 경로를 인자로 받고 각 하위 폴더의 정보를 출력합니다. 마지막으로 최상위 폴더의 용량 정보를 제공을 합니다.

    function Get-FolderSizeWithSub

    {

        param(

            [Parameter(Mandatory=$true)]

            $folderPath

        )

     

        $totalSize = 0

       

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

       

       

       

        foreach($folder in $folders)

        {

            if(!($folder.Mode -match 'd'))

            {

                continue;

            }   

       

            $currentFolderSize  = (Get-ChildItem $folder.FullName | ? { $_.Length -ne $null } | Measure-Object -Property length -sum).sum;

           

            $totalSize  = $totalSize + $currentFolderSize;

           

            Write-Host $folder.Name "Size :" $currentFolderSize;

        }

       

        Write-Host "Total Size : " $totalSize

          

    }

     

    Get-FolderSizeWithSub "C:\Windows"

     

    참고 자료

     

    Using the Test-Path Cmdlet

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

     

    Using the Get-ChildItem Cmdlet

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

     

    Using the Remove-Item Cmdlet

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

     

    Using the Where-Object Cmdlet

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

     

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

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

    • 답변으로 표시됨 김도남 2011년 11월 2일 수요일 오전 9:11
    2011년 11월 1일 화요일 오전 9:20
    중재자