Скрипт подсчета файлов и вывод процента по изменениям на определенную дату

Powershell scripts

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами ошибку активации Windows 0xC004F074, которую мы ловили на некоторых компьютерах в сети. Сегодня я хочу с вами поделиться полезным скриптом PowerShell который производит подсчет файлов и вывод процента по изменениям на определенную дату. Расскажу, где это может пригодится.

Описание задачи

Представим, что в это непростое десятилетие, когда идут повальные атаки вирусов, шифровальщиков и многие другое и вас пострадала часть данных. Которые были зашифрованы. Данных очень много и чтобы оценить их целостность вы же не будите бегать по каждой папке и открывать их. Вы наверняка захотите это как то ускорить. одним из показателей, который позволит оценить были ли изменены данные, это метка даты изменения. Если она соответствует времени инцидента, то считаем, что данные с высокой долей вероятности побиты.

Для такой задачи у меня есть скрипт PowerShell, который делает:

  • Берет целевую папку
  •  В ней оценивает подпапку первого уровня и в ней производится анализ файлов, по папкам Desktop и Downloads
  • Задается дата изменения файлов на которую будет производится анализ
  • Формируются столбцы путь к папке, количество файлов. количество измененных и процент измененных

 

# copyright Ivan Semin from Pyatilistnik.org
function Date {Get-Date -Format "yyyy.MM.dd HH:mm:ss"}

#Задаем папку которую мы будим сканировать на предмет получения даты и количества файлов
$ts_profiles_dir = "C:\Temp\tsProfiles_Term"

#Работать будим только с папками Desktop и Downloads
$results = @()

foreach ($ts_profile_dir in (Get-ChildItem $ts_profiles_dir -Directory)) # | select -First 50
{
"$(Date) Processing folder `"$($ts_profile_dir.Fullname)`""

$desktop_dir = "$($ts_profile_dir.Fullname)\Desktop"
$Downloads_dir = "$($ts_profile_dir.Fullname)\Downloads"

$count_total = $count_mod = 0

if (Test-Path $desktop_dir -ErrorAction SilentlyContinue)
#Задаем требуемую дату изменения на которую мы будим искать
{
$date = Get-Date -Month 04 -Day 24 -Year 2022 -Hour "04" -Minute "00"

$count_total = (Get-ChildItem $desktop_dir, $Downloads_dir -File -Recurse | Measure-Object).Count
$count_mod = (Get-ChildItem $desktop_dir, $Downloads_dir -File -Recurse | ? {$_.LastWriteTime -ge $date} | Measure-Object).Count
}

$result = New-Object PSObject
#Выводится путь к папке
$result | Add-Member -MemberType NoteProperty -Name "Folder" -Value $ts_profile_dir.Fullname
#Количество файлов
$result | Add-Member -MemberType NoteProperty -Name "Count Total" -Value $count_total
#Количество измененных файлов на указанную дату
$result | Add-Member -MemberType NoteProperty -Name "Count Mod" -Value $count_mod
#Процентное соотношение измененных файлов по отношению к нормальным
$result | Add-Member -MemberType NoteProperty -Name "%" -Value ([math]::Round($($count_mod/$count_total*100)))

$results += $result
}
#Сохранение результата в csv файл
$results | Export-Csv "$PSScriptRoot\profiles_data.csv" -Encoding Unicode -NoTypeInformation -Force

 

Далее вы получаете CSV файл, который должны поделить по столбцам. В результате вы получаете вот такой отформатированный файл с понятной разбивкой по столбцам:

    • Что за папка
    • Сколько в ней файлов
    • Сколько побитых файлов
    • Какой процент побитых

csv файл

Надеюсь, что было полезно. Если остались вопросы, то жду их в комментариях. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *