sábado, 21 de outubro de 2017

Identificando os arquivos grandes

Digamos que desejamos identificar quais arquivos estão ocupando muito espaço em determinado drive.

Ainda que existam boas ferramentas para descobrir, cito aqui (WinDirStat), Powershell pode nos ajudar.

Vamos criar uma função que receberá como parâmetros:
  • O drive que desejamos verificar.
  • O total de arquivos grandes que desejamos inventariar.
  • O total de arquivos grandes que desejamos inventariar.
  • Onde desejamos salvar Log com as informações inventariadas.
  • A extensão dos arquivos que desejamos inventariar
Function Get-LargeFiles {
    param([String]$drive, [Int32]$totalArq, [string]$Log, [String]$Ext)
...
}

Usaremos Get-ChildItem.
Get-ChildItem -path $drive -include $Ext -recurse -ErrorAction "SilentlyContinue" `
| ? { $_.GetType().Name -eq "FileInfo" } | where-Object {$_.Length -gt $fileSize} `
| sort-Object -property length -Descending `
| Select-Object Name, `
@{Name="Size In MB";Expression={ "{0:N0}" -f ($_.Length / 1MB)}},`
@{Name="LastWriteTime";Expression={$_.LastWriteTime}},`
@{Name="Path";Expression={$_.directory}} -first $totalArq

A função poderia ser escrita assim:
Function Get-LargeFiles {
    param([String]$drive, [Int32]$totalArq, [string]$Log, [String]$Ext)

Clear-Host
Write-Host " "
Write-Host "Buscando em $drive os $totalArq maiores arquivos (aguarde, pode demorar...)"
"Abaixo estão os $totalArq maiores arquivos em $drive, ordenados do maior ao menor:" | out-file -width 150 $Log -Force
$largeSizefiles = Get-ChildItem -path $drive -include $Ext -recurse -ErrorAction "SilentlyContinue" | ? { $_.GetType().Name -eq "FileInfo" } | where-Object {$_.Length -gt $fileSize} | sort-Object -property length -Descending | Select-Object Name, @{Name="Size In MB";Expression={ "{0:N0}" -f ($_.Length / 1MB)}},@{Name="LastWriteTime";Expression={$_.LastWriteTime}},@{Name="Path";Expression={$_.directory}} -first $totalArq
$largeSizefiles | format-list -property Name,"Size In MB",Path,LastWriteTime | out-file -width 150 $Log -append
Write-Host " "
Write-Host "Busca Completa!"
Write-Host " "
Write-Host "Pressione a tecla [ENTER] e o Log será aberto no Bloco de Notas"
Read-Host
c:\windows\system32\notepad.exe $Log
}

E ser chamada assim.
Get-LargeFiles -drive "E:" -totalArq 11 -Log "E:\LargeFiles.txt" -Ext "*.*"

Nesse exemplo, estamos verificando os 11 maiores arquivos, de qualquer extensão, do drive E:
Referência: RobWillis.info

Nenhum comentário:

Postar um comentário