Descobrir tamanho pastas Powershell
Introdução
Nesse artigo veremos de forma breve e simples como verificar tamanho de pastas e arquivos utilizando Powershell.
Isso pode vir a ser útil em scripts de manutenções ou monitoramento ou até para acompanharmos o espaço em disco de nossos servidores.
Utilizando Get-ChildItem
Para coletarmos essa informação é necessário percorrermos todos os arquivos e diretorios dentro de um arquivo especifico, o que torna o script um pouco lento, utilizando o comando get-childitem na pasta da qual queremos saber a informação com a opção -Recurse podemos verificar a propriedade length de todos os arquivos.
Get-ChildItem C:\Users\Matheus -Recurse | %{$_.length}
Porém temos que somar esse valor e também tentar deixar de uma forma mais simples a visualização, podemos começar filtrando o resultado do get-childitem para retornar somente arquivos e não pastas, nesse caso utilizamos o parâmetro -Attributes do próprio get-childitem, que vai ter um resultado mais performático que com o where-object.
Get-ChildItem c:\Users\Matheus -Recurse -Attributes "!Directory" | %{$_.length}
Então teremos todos os objetos que não forem do tipo Directory, isso nos retorna um valor em bytes, estamos quase onde queremos, vamos tentar converter esse valor para GBs
$Size=0
Get-ChildItem c:\Users\Matheus -Recurse -Attributes "!Directory" | %{$Size+=$_.length}
$Size/1GB
Agora temos o valor em GB porém se verificarmos com o tamanho real da pasta veremos que esta relativamente menor, isso é porque esquecemos dos arquivos ocultos e arquivos do sistema, para incluir esses arquivos adicionamos a flag Hidden junto ao !Directory.
$Size=0
Get-ChildItem c:\Users\Matheus -Recurse -Attributes "Hidden,!Directory" | %{$Size+=$_.length}
$Size/1GB
Agora sim temos o tamanha real da pasta, caso queria facilitar sua vida pode elaborar uma função para executar isso.
Função pronta ( CTRL+C )
Essa função tem um funcionamento simples porém eficaz que vai lhe retornar o tamanho de todos os arquivos passado para ela em um objeto simples.
Function Get-FolderSize {
** param(
[Parameter(Mandatory=$true)][string[]]$Folders
)
Begin{
Foreach($Folder in $Folders){
if(!(Get-item $Folder)){
Throw "Erro, $FOLDER não existe ou você não possui permissão nessa pasta. Favor especificar o caminho completo da pasta."
}
}
}
Process{
Foreach($Folder in $Folders){
$Size = 0
Get-ChildItem $Folder -Recurse -Attributes "Hidden,!Directory" -ErrorAction silentlycontinue | %{$Size+=$_.Length}
[pscustomobject]@{Folder=$Folder;Size="{0:N2}" -f($SIZE/1GB)+" GB"}
}
}
End{
}
}
Get-FolderSize -Folders C:\Users\Matheus,E:\Blog,E:\Filmes**
Referências
Esse artigo foi feito com base no conhecimento adquirido através da prática e necessidade do dia-dia trabalhando com powershell.
Este artigo foi originalmente escrito por:
Matheus Kamphorst | blog: http://howtoserver.com