vbs script microsoft library guy windows powershell diskspace

windows - library - script powershell microsoft



du en PowerShell? (3)

¿Cómo puedo obtener un análisis por correo electrónico utilizando PowerShell? Me gustaría verificar periódicamente el tamaño de los directorios en mi disco.

Lo siguiente me da el tamaño de cada archivo en el directorio actual:

foreach ($o in gci) { Write-output $o.Length }

Pero lo que realmente quiero es el tamaño agregado de todos los archivos en el directorio, incluidos los subdirectorios. También me gustaría poder clasificarlo por tamaño, opcionalmente.


Hay una implementación disponible en el blog "Explorando hermosos idiomas":

"Una implementación de ''du -s *'' en Powershell"

function directory-summary($dir=".") { get-childitem $dir | % { $f = $_ ; get-childitem -r $_.FullName | measure-object -property length -sum | select @{Name="Name";Expression={$f}},Sum} }

(Código del propietario del blog: Luis Diego Fallas).

Salida:

PS C:/Python25> directory-summary Name Sum ---- --- DLLs 4794012 Doc 4160038 include 382592 Lib 13752327 libs 948600 tcl 3248808 Tools 547784 LICENSE.txt 13817 NEWS.txt 88573 python.exe 24064 pythonw.exe 24576 README.txt 56691 w9xpopen.exe 4608


Modifiqué ligeramente el comando en la respuesta para ordenar descendente por tamaño e incluir tamaño en MB:

gci . | %{$f=$_; gci -r $_.FullName | measure-object -property length -sum | select @{Name="Name"; Expression={$f}}, @{Name="Sum (MB)"; Expression={"{0:N3}" -f ($_.sum / 1MB) }}, Sum } | sort Sum -desc | format-table -Property Name,"Sum (MB)", Sum -autosize

Salida:

PS C:/scripts> du Name Sum (MB) Sum ---- -------- --- results 101.297 106217913 SysinternalsSuite 56.081 58805079 ALUC 25.473 26710018 dir 11.812 12385690 dir2 3.168 3322298

Tal vez no sea el método más eficiente, pero funciona.


function Get-DiskUsage ([string]$path=".") { $groupedList = Get-ChildItem -Recurse -File $path | Group-Object directoryName | select name,@{name=''length''; expression={($_.group | Measure-Object -sum length).sum } } foreach ($dn in $groupedList) { New-Object psobject -Property @{ directoryName=$dn.name; length=($groupedList | where { $_.name -like "$($dn.name)*" } | Measure-Object -Sum length).sum } } }

El mío es un poco diferente; Agrupo todos los archivos en el nombre del director, luego recorro los totales de la lista para cada directorio (para incluir los subdirectorios).