2010-10-06 5 views
5

Essayez d'avoir la commande "dir" qui affiche la taille des sous-dossiers et des fichiers. Après googler « la taille du répertoire Powershell », j'ai trouvé Thew deux liens utilesAffichage de la structure du répertoire avec la taille dans Powershell

  1. Détermination de la taille d'un dossier http://technet.microsoft.com/en-us/library/ff730945.aspx
  2. PowerShell Script pour obtenir un répertoire Taille totale PowerShell Script to Get a Directory Total Size

Ces soultions sont grands , mais je cherche quelque chose ressemble à la sortie "dir", pratique et simple et que je peux utiliser n'importe où dans la structure du dossier.

Donc, j'ai fini par faire cela, toutes les suggestions pour le rendre simple, élégant, efficace.

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} 
        } 
    }; 

Merci.

Répondre

8

Le premier mod mineur serait d'éviter de créer un nouvel objet FileSystemObject pour chaque répertoire. Faites-en une fonction et sortez le nouvel objet du 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} 
         } 
        } 
} 

Si vous voulez éviter COM tout à fait vous pourriez calculer les tailles dir en utilisant simplement PowerShell comme ceci:

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 
} 
+0

Merci Keith, Ce que je fini par faire est de placer cette fonction dans le fichier de profil, donc je peux y accéder quand je l'utilise PS – iraSenthil

+0

@Keith Hill: +1 et si je pouvais le faire deux fois, je le ferais ... J'essaie de désencombrer ma HD car mon VMware est en train de mourir et je veux voir facilement où se trouve l'espace disque en train d'aller. Ceci est une aide réelle! – wmorrison365

+0

De retour! :-) – wmorrison365

Questions connexes