Esse código tem como objetivo limpar a pasta de cache do SCCM (System Center Configuration Manager). Ele faz isso verificando os arquivos na pasta de cache e os objetos WMI associados, e excluindo aqueles que não são referenciados há mais de 30 dias. Além disso, ele remove pastas e objetos WMI órfãos que não têm correspondência na pasta de cache no disco.
Obter o Caminho do Cache do SCCM:
$SCCMCachePath = ([wmi]"ROOT\ccm\SoftMgmtAgent:CacheConfig.ConfigKey='Cache'").Location
Esta linha usa o WMI (Windows Management Instrumentation) para recuperar a localização do cache do SCCM do registro.
Verificar a Existência do Caminho:
if (!(Test-Path $SCCMCachePath)) {...}
Este bloco verifica se o caminho do cache recuperado existe e é acessível usando o cmdlet Test-Path .
Se não, uma mensagem de erro é escrita e o script é encerrado.
Obter Objetos de Cache Obsoletos:
$StaleCacheObjects = Get-WmiObject -Query "SELECT * FROM CacheInfoEx" -Namespace "ROOT\ccm\SoftMgmtAgent" | Where-Object { ... }
Esta linha recupera todas as informações do cache usando Get-WmiObject com a classe CacheInfoEx no namespace ROOT\ccm\SoftMgmtAgent .
A cláusula Where-Object subsequente filtra os resultados para objetos onde a diferença entre a data atual e a propriedade LastReferenced (convertida em um objeto datetime) é maior que 30 dias. Essencialmente, ele encontra objetos de cache não acessados em mais de 30 dias.
Excluir Objetos Obsoletos do Disco:
foreach ($StaleCacheObject in $StaleCacheObjects) {... }
Este loop itera por cada objeto de cache obsoleto encontrado na etapa anterior.
Dentro do loop:
Remove-Item -Path $StaleCacheObject.Location -Recurse -Force
Tenta excluir a localização do objeto (o arquivo ou pasta) do disco.
-Recurse garante a exclusão de subpastas dentro da localização do objeto de cache.
-Force ignora solicitações de confirmação durante a exclusão.
O bloco try...catch lida com exceções potenciais (erros) durante a exclusão.
Se um erro ocorrer, ele grava uma mensagem de erro com a localização do objeto.
Excluir Objetos Obsoletos do WMI (Opcional):
O bloco try...catch tenta excluir os objetos de cache obsoletos do repositório WMI usando Remove-WmiObject.
Esta etapa é opcional e pode não ser necessária dependendo de seus requisitos.
Se um erro ocorrer, ele grava uma mensagem de erro genérica sobre a falha na exclusão do WMI.
# Get the SCCM cache path
$SCCMCachePath = ([wmi]"ROOT\ccm\SoftMgmtAgent:CacheConfig.ConfigKey='Cache'").Location
# Check if the cache path exists and is accessible
if (!(Test-Path $SCCMCachePath))
{
Write-Error "The SCCM cache path does not exist or is not accessible: $SCCMCachePath"
return
}
# Get cache objects that have not been referenced for more than 30 days
$StaleCacheObjects = Get-WmiObject -Query "SELECT * FROM CacheInfoEx" -Namespace "ROOT\ccm\SoftMgmtAgent" | Where-Object { ([datetime](Date) - ([System.Management.ManagementDateTimeConverter]::ToDateTime($_.LastReferenced))).Days -gt 30 }
# Delete stale cache objects from disk
foreach ($StaleCacheObject in $StaleCacheObjects)
{
try
{
Remove-Item -Path $StaleCacheObject.Location -Recurse -Force
}
catch [System.Exception]
{
Write-Error "Failed to delete stale cache object from disk: $($StaleCacheObject.Location)"
}
}
# Delete stale cache objects from WMI
try
{
$StaleCacheObjects | Remove-WmiObject
}
catch [System.Exception]
{
Write-Error "Failed to delete stale cache objects from WMI."
}
# Get all cached folders from disk
$
Dism.exe
Reduzir o Tamanho da Pasta WinSxS
- Abra o Prompt de Comando como administrador.
- Execute os seguintes comandos para limpar as atualizações
Analisar a pasta WinSxS e fornecer um relatório sobre o uso de espaço:
Dism.exe /online /Cleanup-Image /AnalyzeComponentStore
Remover os componentes obsoletos e reduzir o tamanho da pasta:
DISM.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Remove pacotes de service pack substituídos:
dism.exe /online /Cleanup-Image /SPSuperseded