2013-04-02 9 views
0

나는 특정 디렉토리에서 시작하여 디스크 사용량을 얻기 위해 다음 코드 조각을 사용하고있다 :PowerShell의 특정 디렉토리에서 디스크 사용을 시작하는 더 빠른 방법이 있습니까?

$usage = (Get-ChildItem $webRoot -recurse | Measure-Object -property length -sum) 
$diskUsage = $usage.sum 

문제이 단순히 우측 창에서 디렉토리를 클릭 비해 매우 긴 시간이 걸립니다이며, 속성을보고.

탐색기에서 디스크 사용량을 얻기 위해 사용하는 기능에 액세스 할 수 있습니까? 아니면 사용하고있는 방법보다 더 빠른 다른 방법이 있습니까?

내 PS 코드에서 검색하는 순환 링크가있는 경우 어떻게 될지 잘 모르겠습니다. 나는 그것이 잠길 수 있다고 생각한다.

답변

0

해도, 그건 내 네트워크 드라이브에 나를 위해 무슨 일입니다. 1,000,000 개 이상의 파일과 500,000 개 이상의 디렉토리가 있기 때문에 시간이 걸립니다.

제공 한 명령을 사용하면 먼저 모든 파일과 폴더를 가져 와서 메모리에 저장합니다. 이렇게 많은 파일이 있기 때문에 $files = gci $path -r하는 것은 오랜 시간이 걸립니다. 그런 다음 명령은 큰 메모리 청크를 Measure-Object으로 전달합니다. 마지막으로 Measure이 계산을 수행합니다. 따라서 아무런 진전없이 잠시 기다리고 있습니다.

PowerShell processes a ForEachObject cmdlet, it processes each value as it passes through the pipeline, so it uses less memory at any given time.

당신이 할 수있는 것은 크기를 처리하는 데 Foreach-객체에게 % 루프를 사용하고, 이미 계산했다가 출력 무슨이이다

. 화면에 텍스트를 인쇄하면 문제는 느려지지만 적어도 진행 상황은 보입니다. 효율성을 높이려면 cls; "Total: $($total/1GB)GB"을 제거하십시오.
gci $path -file -r | % {$total += $_.length; cls; "Total: $($total/1GB)GB"} 

은 명령 및 응답으로 주어진 다른 명령에 Measure-Command를 실행하고 가장 빠른 어느 쪽을 참조하십시오.

0

내가 더 빨리 만들 수 있을지 의심 스럽다. 디스크 공간 분석 도구 (예 : TreeSize)는 디스크의 디렉토리를 이동하는 데 시간이 오래 걸립니다.

+0

OS가 빠른 계산을 PowerShell에서 사용할 수없는 경우 이상합니다. – FrodoFraggins

+0

OS가 더 빠른 계산을한다고는 생각하지 않습니다. 디스크 전체에 대해 사용 가능/사용되지 않는 전체 공간에 대한 단일 값은 파일 시스템의 변경 사항으로 최신 상태로 유지됩니다. 그러나 OS가 파일 시스템의 모든 레벨에서 정보를 감시하려고 시도한 경우를 상상해보십시오. 5 레벨의 디렉토리에서 하나의 파일을 변경한다고 가정 해 보겠습니다. 5 회의 계산이 필요합니다. ... 이제는 Visual Studio를 여는 것과 같은 것으로 외삽합니다. 심지어 SSD도이를 처리 할 수 ​​없습니다! :) – northben

1

는 "옛날 방식"을보십시오 : 당신은 마우스 오른쪽 버튼을 클릭하고 속성보기 Explorer가 여전히 크기를 계산해야 할 때

$fso = New-Object -ComObject Scripting.FileSystemObject 
$fso.GetFolder($webRoot).Size