Внимание! Олдпостинг! Этот пост наконец-то добрался до сайта.
Не буду говорить отдельно про ETL логи — если Вы попали на эту страницу, значит уже представляете что это такое, что их создаёт и Вам интересно можно ли от них спокойно избавиться и как, соответственно, это делать автоматически.
Спойлер: удалять их можно.
Первая и единственная оговорка по теме: постоянное удаление лог-файлов — это вообще не метод. Лучше найдите и отключите групповыми политиками службы, которые их создают и тогда удаление логов будет одноразовым мероприятием.
Но! Если Вы заметили, что на каком-то из хостов папка ETLLogs стала весить преступно много и отъедает драгоценное место накопителя — можно воспользоваться этой штуковиной:
[System.Console]::Title = "Зачистка файлов из папки ETLLogs"
$computername = Read-Host "Введите имя удалённого хоста"
$ping = Test-Connection -ComputerName $computername -Count 1 -Quiet
if ($ping)
{
Write-Host "Будет запущено удаление файлов ETLLogs! Нажмите Ctrl+C для отмены." -ForegroundColor Red
Sleep(10)
$etllogspath = "\\$computername\c$\ProgramData\Microsoft\Diagnosis\ETLLogs\"
Get-ChildItem -Path $etllogspath -Filter *.etl |
Where-Object {$_.Name -notlike "INVAGENT_Utc.etl"} |
Remove-Item -Verbose -ErrorAction Continue
}
else
{
Write-Host "Хост $computername не отвечает!" -ForegroundColor Red
}
Write-Host
Write-Host "Работа скрипта завершена!" -ForegroundColor Cyan
Sleep(10)
Всё, что требуется — указать имя удалённого хоста или его IP-адрес. Добавлять блок try…catch не стал. Ограничился ErrorAction.
А что делать, если групповая политика отключила виновников торжества, а файлы как лежали себе, так и продолжают лежать и занимать драгоценное место?
Прикрутите к тому же объекту групповой политики скрипт автозагрузки с таким содержимым:
$pathtoetl = [System.IO.Path]::Combine($env:ProgramData, "Microsoft\Diagnosis\ETLLogs")
Get-ChildItem -Path $pathtoetl -Filter *.etl |
Where-Object {$_.Name -notlike "INVAGENT_Utc.etl"} |
Remove-Item
Когда будут обработаны все хосты — можно закомментировать содержимое в скрипте.
Вместо P.S.: этой конструкцией я пользовался, когда тестировал скрипты:
$newfile = [System.IO.Path]::Combine($env:ProgramData, "Microsoft\Diagnosis\ETLLogs\test.etl") New-Item -Path $newfile
Этот код создаёт файл-пустышку test.etl по заветному пути и дальше можно проверять как отработал тот или иной скрипт.