Manter espaço livre no disco é crucial ao gerenciar servidores e sistemas. Como administradores, vocês não gostariam de serem pegos de surpresa por uma situação de ‘disco cheio’. Para garantir que vocês estejam em uma situação segura, devem aprender como usar o PowerShell para excluir arquivos!
Neste artigo, vocês aprenderão praticamente todas as maneiras de remover arquivos de seus sistemas com o PowerShell.
Vamos começar!
Pré-requisitos
Este artigo apresenta exemplos usando o PowerShell, e se planejam acompanhar, precisarão do seguinte.
- A computer that is running Windows 10 or above.
- Windows PowerShell 5.1 ou PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Usando o Cmdlet Remove-Item para Excluir Arquivos
Quando vocês precisam simplesmente usar o PowerShell para excluir um arquivo, provavelmente aprenderão imediatamente sobre o Remove-Item
cmdlet. Este cmdlet é o padrão de facto para remover arquivos com o PowerShell.
Usar Remove-Item
combinado com o cmdlet Get-ChildItem
para ler arquivos e pastas e o poderoso pipeline do PowerShell realmente pode facilitar as coisas.
Relacionado: Get-ChildItem: Listando Arquivos, Registro, Certificados e Mais
Vocês sabiam que o cmdlet
Remove-Item
tem um alias pelo nome dedel
? Ao trabalhar no PowerShell, usarRemove-Item
oudel
executará o mesmo comando.
Usando o PowerShell para Excluir um Arquivo
O primeiro exemplo que seria mais útil é o mais básico – isto é, excluir um único arquivo. Para excluir apenas um único arquivo, você só precisa usar o comando abaixo. O código abaixo exclui o arquivo C:\temp\random.txt.
Executar o código acima no PowerShell não mostrará nada na tela a menos que ocorra um erro.
Usando o PowerShell para Excluir Todos os Arquivos em uma Pasta
Neste exemplo, o código abaixo exclui todos os arquivos em uma pasta. O cmdlet Get-ChildItem
visa C:\temp com o parâmetro -Path
. O parâmetro -File
indica que o único tipo de item a ser incluído são arquivos. Get-ChildItem
ignora pastas.
A saída deve se parecer com a captura de tela abaixo.

Usando o PowerShell para Excluir Todos os Arquivos Recursivamente
O exemplo anterior apenas excluiu arquivos na pasta C:\temp. Se você precisar também excluir os arquivos dentro de cada subdiretório, você precisa adicionar o switch -Recurse
ao cmdlet Get-ChildItem
para obter todos os arquivos recursivamente.
Executar o código acima força o PowerShell a examinar todas as subpastas e recuperar toda a lista de arquivos. A saída abaixo mostra que o código foi capaz de excluir arquivos na pasta superior; no entanto, falhou em recuperar os arquivos nas subpastas.

Contornando o Problema do Caminho Longo
O erro mostrado acima indica que o PowerShell “não pôde encontrar uma parte do caminho”. Esse erro indica que o caminho que o cmdlet está tentando acessar não existe – o que é enganoso.
Neste caso, o erro ocorreu porque o caminho que o Get-ChildItem
está tentando ler ultrapassa o comprimento máximo do caminho de 260 caracteres.
A captura de tela abaixo mostra que o caminho ou diretório e seus subdiretórios existem, e um arquivo de texto chamado InTooDeep.txt está localizado no subdiretório mais profundo. A combinação de todos os caracteres que compõem os nomes de diretórios aninhados cria um problema de caminho longo.

No Windows PowerShell 5.1, há uma solução alternativa para o problema do nome longo do caminho. A solução alternativa é usar a versão Unicode do caminho. Em vez de especificar o caminho assim – C:\temp, use a versão Unicode assim – ‘\\?\C:\temp’ para pastas localizadas localmente, ou ‘\\?\UNC\<computername>\<share>\Temp’ se a pasta estiver localizada em um caminho UNC.
Usando o código modificado acima que atende ao problema do nome longo do caminho, a saída abaixo mostra que o PowerShell leu o nome do caminho profundamente aninhado com sucesso e excluiu o arquivo.

Observe que o problema do nome longo do caminho não afeta o PowerShell 7.0. Com o PowerShell 7.0, não há necessidade de usar a versão Unicode do caminho, porque ele já possui suporte integrado para nomes de caminhos longos.
Se as pastas também precisarem ser excluídas, basta remover o parâmetro -File
do cmdlet Get-ChildItem
, e o PowerShell deve excluir todos os itens, incluindo arquivos e pastas.
Usando o PowerShell para Excluir Arquivos Mais Antigos Que x Dias
Outro exemplo típico de organização de espaço em disco é excluir arquivos que têm mais do que um número específico de dias. Este exemplo é útil para remover arquivos de log antigos, como os gerados por servidores web IIS, para liberar espaço em disco.
Neste exemplo, existem arquivos em c:\temp que têm mais do que 14 dias. Usando o script abaixo, o Name
, CreationTime
, e AgeInDays
de cada arquivo em c:\temp são exibidos.
Como pode ser visto na captura de tela abaixo, existem arquivos com 15 dias, 7 dias e 0 dias.

Agora que você conhece os arquivos a serem removidos, pode criar um script para deletar apenas aqueles que têm mais do que um número específico de dias – neste caso, mais do que 14 dias.
No script abaixo, os arquivos em C:\temp cujo valor de CreationTime
é mais antigo que o limite definido serão excluídos.
A primeira linha define o caminho para Get-ChildItem
procurar. O caminho é salvo na variável $path
. Em seguida, na segunda linha, é especificado o limite. O valor da variável $threshold
é a idade em dias que o arquivo a ser excluído deve ter.
A próxima linha de código após a variável $threshold
fará o seguinte:
- Obter a coleção de arquivos localizados na pasta especificada na variável
$path
. Neste exemplo, o caminho é C:\temp. - Filtrar a saída para incluir apenas arquivos cujo valor de
CreationTime
é mais antigo do que o número de dias salvo na variável$threshold
. Neste exemplo, o limite é de 14 dias. - Conduza a lista filtrada de ficheiros para o valor de
Remove-Item
para realizar a eliminação desses ficheiros.
Quando executar o código acima, verá uma saída como mostrado abaixo.

Note que, a partir da captura de ecrã acima, com base na mensagem detalhada, o script apenas eliminou cinco ficheiros mais antigos do que 14 dias. Para confirmar que os ficheiros mais recentes do que 14 dias ainda existem, execute o código abaixo para listá-los novamente.
O resultado abaixo confirma que o Remove-Item
não eliminou os ficheiros mais recentes.

Utilizando o PowerShell para Correspondência e Eliminação de Padrões de Ficheiros
Eliminar todos os ficheiros, independentemente do nome, tipo ou extensão, nem sempre é a melhor abordagem. Às vezes, é necessário excluir ou incluir explicitamente certos ficheiros no processo de eliminação.
O próximo exemplo abaixo mostra como eliminar os ficheiros que correspondem ao nome do ficheiro *.LOG. Uma maneira de fazer isso é usando o cmdlet Remove-Item
diretamente com o uso do parâmetro -Include
, como mostrado abaixo.
Outra maneira, talvez a abordagem cautelosa, é usar o Get-ChildItem
primeiro para recolher a lista de ficheiros a serem eliminados. Só quando estiver satisfeito com a lista de ficheiros para eliminação, pode finalmente encaminhar a coleção para o cmdlet Remove-Item
.
Por exemplo, o código abaixo obtém os ficheiros *.LOG em c:\temp.
Como resultado do código acima, o Get-ChildItem
retorna uma lista de ficheiros que correspondem ao nome do ficheiro *.LOG.

Mas, e se você quiser excluir um arquivo que contenha o número 5 em seu nome? Você pode fazer isso adicionando o parâmetro -Exclude
como no próximo código.
Como você excluiu o arquivo com o número 5, o resultado é agora diferente. Especificamente, o arquivo File_5.log não está mais na lista, como mostrado abaixo.

Quando você estiver satisfeito com a coleção de arquivos que seu código cria, então você pode encaminhar a coleção de arquivos para o cmdlet Remove-Item
para finalmente excluir esses arquivos.
Após executar seu código final, você terá alcançado seu objetivo de excluir apenas os arquivos selecionados.

Excluindo Arquivos usando WMI no PowerShell
Agora que você tem um bom entendimento de como usar o comum cmdlet Remove-Item
para remover arquivos, vamos entrar em um caso de uso mais avançado; usando WMI.
O PowerShell vem com suporte para WMI. E o suporte para WMI significa que consultas e métodos WMI podem ser chamados de dentro do PowerShell. Sim, WMI não é apenas para scripts Visual Basic que os administradores costumavam usar nos primeiros dias do Windows.
A Microsoft lançou cmdlets CIM específicos para WMI no PowerShell 3.0. Os cmdlets CIM que serão usados para excluir arquivos são o Get-CimInstance
e o Invoke-CimMethod
.
Usando o PowerShell e WMI para Excluir um Arquivo
Este exemplo presume que você conhece o caminho do arquivo específico a ser excluído. O cmdlet Get-CimInstance
com a classe Cim_DataFile
é utilizado para recuperar informações sobre o arquivo a ser excluído, que é C:\Temp\random.txt.
No código acima, o parâmetro -Filter
aceita uma consulta no formato WQL. O uso de WQL requer que você escape alguns caracteres, incluindo a barra invertida. E, como o caractere de escape do WQL também é a barra invertida, resulta nos caracteres de duas barras invertidas – \\
.
Executando o código acima produz o resultado mostrado na demonstração abaixo. As informações sobre C:\Temp\random.txt são salvas na variável $file2delete

Agora que as informações sobre o arquivo C:\Temp\random.txt foram recuperadas, o objeto resultante na variável $file2delete
pode ser encaminhado para o cmdlet Invoke-CimMethod
. O cmdlet Invoke-CimMethod
possui um parâmetro chamado -Name
, que representa o nome do método da classe Cim_DataFile
.
Como você pode ver na captura de tela abaixo, o ReturnValue
mostra 0, o que significa que o comando foi bem-sucedido.

Para saber sobre os possíveis códigos de ReturnValue, consulte este link – método Delete da classe CIM_DataFile
Além disso, a captura de tela abaixo mostra que, após a execução do método Invoke-CimMethod
Delete()
, o CIM apenas removeu o arquivo C:\Temp\random.txt. Não removeu os outros arquivos.

Usando PowerShell e WMI para Excluir Todos os Arquivos em uma Pasta
No próximo exemplo, mostraremos como excluir todos os arquivos em uma pasta usando PowerShell e WMI. Os mesmos cmdlets usados no exemplo anterior, que são Get-CimInstance
e Invoke-CimMethod
, serão utilizados. No entanto, desta vez, a consulta WQL recuperará todos os arquivos na pasta em vez de apenas um arquivo específico.
No código a seguir, o cmdlet Get-CimInstance
recupera todos os arquivos localizados em C:\temp. Como pode ser visto abaixo, a consulta filtra as propriedades Drive
e Path
da classe Cim_DataFile
.
A execução do código acima salva as informações recuperadas sobre os arquivos em C:\temp na variável $file2delete
. A visualização do(s) valor(es) da variável $file2delete
mostra a saída abaixo.

Agora, os valores armazenados na variável $file2delete
podem ser encaminhados para o Invoke-CimMethod
para excluir todos os arquivos em c:\temp.
Lembre-se, o código de ReturnValue
0 significa que foi bem-sucedido e para cada arquivo em que o método de exclusão foi chamado, terá seu próprio código de ReturnValue
.

Usando o PowerShell e o WMI para Excluir Arquivos por Extensão
Você viu no exemplo anterior como excluir todos os arquivos em uma pasta, independentemente da extensão. No entanto, você também pode controlar quais arquivos serão excluídos com base na extensão.
Você notará no código abaixo que, desta vez, a consulta tem uma condição adicional (Name LIKE '%.log
). Essa condição adicional significa que apenas os arquivos que correspondem à extensão .LOG são retornados. O sinal de percentagem (%
) é um operador LIKE WQL que significa “Uma cadeia de caracteres de zero ou mais caracteres”. Em termos de programação, o %
é equivalente a um caractere curinga, que é o asterisco (*
).
A demonstração abaixo mostra que antes da execução do código acima, existem nove arquivos *.LOG e apenas um arquivo *.TXT. Depois que o código termina de ser executado, os arquivos *.LOG são excluídos e o arquivo *.TXT é o único arquivo restante na pasta.

Comparando WMI e Remove-Item
Até agora neste tutorial, você obteve uma visão geral ampla de como usar o PowerShell para excluir arquivos. Você aprendeu sobre Remove-Item
e também sobre WMI. Ambos executam funções semelhantes, mas de maneiras muito diferentes.
Qual método você deve usar para excluir arquivos; Remove-Item
ou WMI?
Usar um cmdlet integrado no PowerShell como Get-ChildItem
e Remove-Item
para recuperar e excluir arquivos é muito mais rápido do que usar o WMI.
O exemplo abaixo mostra a comparação ao usar o WMI e o cmdlet integrado do PowerShell para obter a lista de arquivos no diretório C:\windows\web e seus subdiretórios.
Ao executar o código acima no PowerShell, você verá uma saída semelhante à mostrada abaixo.

Como pode ser observado na saída acima, listar os arquivos em C:\windows\web quase levou dez vezes mais tempo usando Get-CimInstance
do que o tempo necessário para que Get-ChildItem
concluísse!
Você também notou como a linha Get-ChildItem
é muito mais curta do que Get-CimInstance
? Não apenas você obtém uma execução mais rápida usando Get-ChildItem
, mas também se beneficia de um código mais limpo e curto.
Próximos Passos
Neste artigo, você viu as duas maneiras diferentes de usar o PowerShell para excluir arquivos com cmdlets integrados e WMI/CIM.
Saiba que você deve sempre usar os cmdlets Get-ChildItem
e Remove-Item
para remover arquivos. Esses cmdlets integrados são mais flexíveis, mais fáceis e mais rápidos de usar do que ao usar o WMI.
Tente criar um script que possa realizar a limpeza do espaço em disco para você. Certamente, alguns scripts já existem para esse fim; use-os como referência, mas se estiver disposto a praticar e aprender, deveria tentar criar o seu próprio.
Leitura Adicional
Source:
https://adamtheautomator.com/powershell-to-delete-files/