No seu notebook rodando Windows 10, João pretende remover alguns arquivos presentes na pasta C:\xpto e, recursivamente, as respectivas subpastas em todos os níveis. Devem ser removidos somente os arquivos cuja última alteração tenha ocorrido há mais de 14 dias. Por meio da PowerShell, o script adequado para essa remoção é:
- A)Remove-Item | Get-ChildItem –Path "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -< (Get-Date).AddDays(-14))}
Errada, porque o pipeline está invertido e ainda usa um operador de comparação incorreto, o que impede a lógica de seleção seguida de remoção.
- B)Remove-Item –Path "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(14))}
Errada, porque Remove-Item não deve iniciar o pipeline dessa forma e o uso de AddDays(14) aponta para datas no futuro, não para arquivos com mais de 14 dias.
- C)Remove –Path "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-14))}
Errada, porque Remove não é um cmdlet válido nesse formato e a sintaxe apresentada não corresponde ao PowerShell.
- D)Get-ChildItem From "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-14))} > Litter
Errada, porque a sintaxe Get-ChildItem From é inválida e a saída para "Litter" não tem relação com a remoção pedida.
- E)Get-ChildItem –Path "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-14))} | Remove-Item
Certa, porque lista recursivamente os itens, filtra os que têm LastWriteTime menor que a data de 14 dias atrás e então os remove.
Gabarito: E
A ideia aqui é simples: primeiro você lista os arquivos dentro de C:\xpto, incluindo as subpastas, e depois filtra apenas os que foram modificados há mais de 14 dias. Em PowerShell, isso normalmente é feito em duas etapas no pipeline: Get-ChildItem para localizar os itens e Where-Object para aplicar a condição de data. O ponto central é a propriedade LastWriteTime, que indica a última alteração do arquivo. Para pegar arquivos antigos, a comparação correta é com Get-Date).AddDays(-14), isto é, a data de hoje menos 14 dias. Se a última modificação for menor que esse limite, o arquivo entrou na lista de remoção. Depois do filtro, o resultado é passado para Remove-Item, que executa a exclusão. Essa ordem importa muito: primeiro selecionar, depois apagar. Se você inverter, mistura tudo e pode acabar tentando remover antes de filtrar, o que não faz sentido no fluxo do pipeline. Por isso o gabarito é a alternativa E: Get-ChildItem -Path "C:\xpto" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-14))} | Remove-Item. Ela faz exatamente o que o enunciado pede: varre recursivamente a pasta, seleciona os arquivos com mais de 14 dias e remove somente esses.