Ir para o conteúdo

Automatizar a Limpeza de Arquivos Temporários

Exemplo 1: Manutenção de Sistema em um PC Pessoal

Limpar o diretório Temp da pasta do usuário atual

# Define o diretório temporário

\$temp_dir = \$env:TEMP

# Exclui todos os arquivos no diretório temporário

Get-ChildItem -Path \$temp_dir\* -Recurse | Remove-Item -Force

# Remove o diretório temporário e todas as subpastas

Remove-Item -Path \$temp_dir -Recurse -Force

# Registra a data e a hora no log

\$logEntry = \"Diretório de arquivos temporários limpo em \" + (Get-Date -Format \"dd/MM/yyyy HH:mm:ss\") + \"`r`n\"

Add-Content -Path \"C:\Logs\temp_cleanup_log.txt\" -Value \$logEntry

Explicação do código.

  • Variável \$temp_dir: O PowerShell usa \$env:TEMP para acessar a variável de ambiente TEMP.

  • Remoção de arquivos: Get-ChildItem -Path \$temp_dir\* -Recurse | Remove-Item -Force lista e remove todos os arquivos no diretório temporário, incluindo os arquivos em subpastas.

  • Remoção de diretório: Remove-Item -Path \$temp_dir -Recurse -Force remove o diretório temporário e todas as subpastas.

  • Log: Add-Content adiciona uma linha ao arquivo de log com a data e hora da limpeza.

Exemplo 2: Manutenção de Servidor de Arquivos

Semelhante ao anterior porém para ser executado em rede, para

servidores

Define o diretório temporário

\$temp_dir = \$env:TEMP

# Exclui todos os arquivos no diretório temporário

Get-ChildItem -Path \$temp_dir\* -Recurse | Remove-Item -Force

# Remove o conteúdo do diretório temporário

Get-ChildItem -Path \$temp_dir\* -Recurse | Remove-Item -Recurse -Force

# Registra a data e a hora no log

\$logEntry = \"Diretório de arquivos temporários limpo em \" + (Get-Date -Format \"dd/MM/yyyy HH:mm:ss\") + \"`r`n\"

Add-Content -Path \"\\Servidor\Logs\temp_cleanup_log.txt\" -Value \$logEntry

  • Definição do diretório temporário:

A variável \$temp_dir é usada para armazenar o caminho para o diretório temporário (\$env:TEMP).

  • Remoção de arquivos:

Get-ChildItem -Path \$temp_dir\* -Recurse | Remove-Item -Force lista todos os arquivos e subpastas no diretório temporário e os remove. A opção -Recurse garante que todos os arquivos em subpastas também sejam removidos.

  • Remoção de subpastas:

A remoção é feita de forma recursiva com Remove-Item -Recurse -Force, que remove os arquivos e pastas dentro do diretório temporário, mas não tenta remover o próprio diretório, pois ele é um diretório do sistema que será recriado automaticamente.

  • Registro em log:

O script adiciona uma entrada ao arquivo de log \\Servidor\Logs\temp_cleanup_log.txt, registrando a data e hora da limpeza.

Monitoramento e Registro do Uso de CPU e Memória

  • Exemplo 1: Monitoramento de Desempenho de um Servidor ou Desktop

# Define o caminho do arquivo de log

\$logfile = \"C:\Logs\server_usage_log.txt\"

# Função p ara formatar bytes em KB, MB, GB

function Format-Size (\$size) {

if (\$size -ge 1GB) {

return \"{0:N2} GB\" -f (\$size / 1GB)

}

elseif (\$size -ge 1MB) {

return \"{0:N2} MB\" -f (\$size / 1MB)

}

elseif (\$size -ge 1KB) {

return \"{0:N2} KB\" -f (\$size / 1KB)

}

else {

return \"\$size Bytes\"

}

}

# Função para formatar o tempo de CPU em horas, minutos e segundos

function Format-CPUTime (\$cpuTime) {

\$timespan = [TimeSpan]::FromSeconds(\$cpuTime)

return \$timespan.ToString(\"hh\:mm\:ss\")

}

# Loop infinito

while (\$true) {

# Adiciona a data e a hora ao log e exibe na tela

\$timestamp = Get-Date -Format \"dd/MM/yyyy HH:mm:ss\"

Write-Host \$timestamp

\$timestamp | Out-File -FilePath \$logfile -Append

# Obtém os 10 processos que mais consomem CPU e formata WS, PM e CPU

\$processInfo = Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 | ForEach-Object {

[PSCustomObject]@{

Name = \$_.Name

CPU = Format-CPUTime \$_.CPU

WS = Format-Size \$_.WorkingSet

PM = Format-Size \$_.PagedMemorySize

}

} | Format-Table -AutoSize | Out-String -Width 512

# Exibe na tela e registra no log

Write-Host \$processInfo

\$processInfo | Out-File -FilePath \$logfile -Append

# Adiciona uma linha em branco ao log e exibe na tela

\"`r`n\" | Out-File -FilePath \$logfile -Append

Write-Host \"\"

# Aguarda 300 segundos (5 minutos)

Start-Sleep -Seconds 300

Desfragmentação de Disco Automatizada

  • Exemplo 1: Manutenção de Disco Rígido em um PC Pessoal

# Define o caminho do arquivo de log

\$logfile = \"C:\Logs\defrag_log.txt\"

# Executa o comando de desfragmentação no drive C: e registra o output no log

Start-Process -FilePath \"defrag.exe\" -ArgumentList \"C:\", \"/U\", \"/V\" -NoNewWindow -RedirectStandardOutput \$logfile -Wait