terça-feira, 20 de janeiro de 2015

PowerShell lista arquivos por idade

Depois de um longo e tenebroso inverso cá estou novamente! Sem muito blá, blá, blá... Fiquei tempo fora porque estava trabalhando muito e quando não me divertia "a valer" bem longe do mundo tecnologico. Vamos ao que importa, precisei por esses dias gerar um relatório para um cliente de uma massa de dados anterior a 2012, o cliente precisava enxergar dentro da storage o volume em GB dos arquivos que poderiam ser movidos para um volume morto. Eu sei que existem ferramentas para isso (algumas caríssimas inclusive), com uma customização ninja é possivel extrair esse relatório do Storage Report Management e o FCI poderia classificar isso com o pé nas costas, mas mesmo com toda essa pujança tecnologia estava muito dificil conseguir um resultado prático. Meus amigos e parceiros na "tecnovida" Bruno Silva e Caio Ferraz enfrentaram comigo o desafio de escrever uma minuscula linha em PowerShell que resolveu a crise e cumpriu o objetivo com muita austeridade (salve Rob Ranches)!!

A linha é a seguinte:

Get-ChildItem "D:\" -recurse | Select-Object Name, LastWriteTime, @{Name="Age";Expression={ (((Get-Date) - $_.LastWriteTime).Days) }}, Length | where-object {$_.Age -ge 760} | where { $_.Length -ne $NULL } | Out-GridView

Ah que bom Marcelão, mas e aí!? Bom, e aí nobre amigo o resultado é lindo, veja:


Essa maravilha trás o nome do arquivo, a data da última vez que foi escrito, a idade (em dias) da última vez que foi escrito, o tamanho (em Bytes), filtra por arquivos iguais ou maiores que 760 dias (o que eu precisava na ocasião) e descarta arquivos que tem o atribuído Length nulo, ou seja, pastas. Por último e não menos importante ele abre uma view gráfica que imprime o output online. Não é emocionante? hahaha... Sem exageros, ok? Isso aqui não é confeitaria!

Agora vejam alguns atributos interessantes que você pode trocar:

LastWriteTime = Última vez que o arquivo foi escrito, poderia a data de quando foi criado por exemplo (CreationTime).

$.Age –ge 760 = Pode alterar a range de tempo que considerar como resultado de filtro, para isso basta alterar o número decimal. Caso queira mudar o critério sugiro que pesquise mas pega essa dica: -lt (Menor que); -le (Menor ou igual); -gt (Maior que); -eq (Igual); -ne (Não igual).

Out | GridView = Imprime o resultado em ferramenta gráfica, pode alternar para exportar direto para um arquivo HTML ou CSV. Essa é fácil né? Export-CSV "nomedoarquivo.csv".

Depois o que fiz foi abrir o resultado em um Excel, formatar uma tabela e aplicar a soma no final. Colhi os resultados e corri para o abraço!


Ah, o resultado... Como ele vem em Bytes eu usei um site para converter e Gigabytes... Finish Him!!! 

É isso meu povo, até a próxima psicografia...

Abraço!

3 comentários:

  1. Muito bom! Parabéns pelo posto, me ajudou muito...

    ResponderExcluir
  2. Cara, muito obrigado, esses seus comandos me abriram muitas portas de soluções com essa visualização em grid. abraço

    ResponderExcluir
  3. Marcelo, sei que esse artigo é antigo, mas estou precisando dessa mesma função de script, porém, preciso que liste também o caminho ao qual o arquivo está. Achei excelente seu script.

    Saberia me informar como adiciono essa informação no script, para que saia o caminho onde o arquivo está localizado?

    ResponderExcluir

O que é o Microsoft Azure afinal?

Salve! Não dá pra falar mais que é uma "onda", a nuvem pegou de verdade e já faz um tempo que para os mais inseridos no contexto...