Script Powershell para localizar e realçar arquivos específicos com base na data de criação

2

Eu estou tentando escrever um script Powershell que verifica uma determinada pasta para arquivos .zip. Os arquivos .zip contêm informações de certos backups. Esses arquivos .zip estão em uma árvore de pastas para diferentes plantas que nossa empresa possui. Todos os dias, supõe-se que haja um novo arquivo .zip na parte inferior dessa árvore de pastas que é retido por um total de 7 dias.

Idealmente, cada pasta deve conter 7 dias consecutivos de backups, totalizando 7 arquivos .zip em cada pasta. Às vezes, há mais de 7 e, às vezes, há 0 dependendo do problema que a fábrica está passando.

Eu quero (e estou tendo problemas) escrever um script que verifique essas pastas para esses arquivos .zip e me avise se não houver arquivos lá dos últimos sete dias. (Tudo bem se não houver exatamente 7).

Até agora eu tenho o seguinte código:

Get-ChildItem -filter "*.zip" -recurse -path C:\ArcherBackup\ | where {($_.CreationTime -gt ((get-date).AddDays(-7)))}

Mas este código traz uma lista de todos os arquivos que eu tenho que procurar manualmente.

Eu gostaria que o script realçasse mais ou menos um diretório que não contenha um arquivo .zip com pelo menos 7 dias de duração.

Qualquer assistência ou orientação é bem-vinda.

    
por cyborgcommando0 05.07.2013 / 21:42

2 respostas

1

Seu snippet retornará todos os arquivos criados nos últimos sete dias.

$_.CreationTime -gt ((get-date).AddDays(-7))

Acho que você deseja retornar arquivos com mais de sete dias, por isso altere -gt para -lt :

$_.CreationTime -lt ((get-date).AddDays(-7))

Ao usar comparações, é uma boa ideia sempre usar menos que os operadores; assim, o condicional aumenta da esquerda para a direita, como um eixo x, e ajuda na legibilidade / compreensão.

0 -lt x -and x -lt 10

Torna óbvio que x deve estar entre 0 e 10.

    
por 05.07.2013 / 22:17
1

var 1, linha de comando, subdiretório que não contém um arquivo .zip com pelo menos 7 dias:

powershell $tm=(get-date).AddDays(-7);ls "C:\ArcherBackup" -fo -r^|?{$_.PSIsContainer}^|%{ls "$($_.FullName)" -fo -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -H Name

var 2, linha de comando, subdiretório que não contém um arquivo .zip com pelo menos 7 dias;

exceto arquivos ocultos e diretório:

powershell $tm=(get-date).AddDays(-7);ls "C:\ArcherBackup" -r^|?{$_.PSIsContainer}^|%{ls "$($_.FullName)" -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -H Name

subpastas vazias sem arquivos:

powershell $d=ls -r^|?{$_.PSIsContainer};$d^|?{$_.GetFiles().Count -eq 0}^|FT -H FullName

subpastas sem arquivos zip:

powershell $d=ls -r^|?{$_.PSIsContainer};$d^|?{$_.GetFiles('*.zip').Count -eq 0}^|FT -H FullName

subpastas sem arquivos zip;

sub diretório que não contém um arquivo .zip com pelo menos 7 dias:

powershell $d=ls "C:\ArcherBackup" -fo -r^|?{$_.PSIsContainer};$tm=(get-date).AddDays(-7);$d^|%{ls "$($_.FullName)" -fo -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -Au -H Name, Count;$d^|?{$_.GetFiles('*.zip').Count -eq 0}^|FT -H FullName|findstr [/s]| more

|findstr [/s]| - exclui uma string vazia no pipe

FT - alias Format Table

FT -H FullName - formato de saída, selecione apenas FullName

-Au alias -Autosize

-H -hide header,

? - alias where - alias Where-Object

% - alias foreach - alias ForEach-Object

-fo - alias -force , fi - alias -filter , -r - alias -recurse

^ - escape do caractere | - o shell atual não é processado como pipeline -command

group - alias Group-Object

    
por 06.07.2013 / 01:48