问题
Trying to have "dir" command that displays size of the sub folders and files. After googling "powershell directory size", I found thew two useful links
- Determining the Size of a Folder http://technet.microsoft.com/en-us/library/ff730945.aspx
- PowerShell Script to Get a Directory Total Size PowerShell Script to Get a Directory Total Size
These soultions are great, but I am looking for something resembles "dir" output, handy and simple and that I can use anywhere in the folder structure.
So, I ended up doing this, Any suggestions to make it simple, elegant, efficient.
Get-ChildItem |
Format-Table -AutoSize Mode, LastWriteTime, Name,
@{ Label="Length"; alignment="Left";
Expression={
if($_.PSIsContainer -eq $True)
{(New-Object -com Scripting.FileSystemObject).GetFolder( $_.FullName).Size}
else
{$_.Length}
}
};
Thank you.
回答1:
The first minor mod would be to avoid creating a new FileSystemObject for every directory. Make this a function and pull the new-object out of the pipeline.
function DirWithSize($path=$pwd)
{
$fso = New-Object -com Scripting.FileSystemObject
Get-ChildItem | Format-Table -AutoSize Mode, LastWriteTime, Name,
@{ Label="Length"; alignment="Left"; Expression={
if($_.PSIsContainer)
{$fso.GetFolder( $_.FullName).Size}
else
{$_.Length}
}
}
}
If you want to avoid COM altogether you could compute the dir sizes using just PowerShell like this:
function DirWithSize($path=$pwd)
{
Get-ChildItem $path |
Foreach {if (!$_.PSIsContainer) {$_} `
else {
$size=0; `
Get-ChildItem $_ -r | Foreach {$size += $_.Length}; `
Add-Member NoteProperty Length $size -Inp $_ -PassThru `
}} |
Format-Table Mode, LastWriteTime, Name, Length -Auto
}
来源:https://stackoverflow.com/questions/3876279/display-directory-structure-with-size-in-powershell