logo powershell

Duplicate files

Dubbel opgeslagen bestanden, ze nemen totaal overbodig opslagruimte in beslag. Gelukkig hebben de mensen van Netwrix er ooit een Powershell script voor gemaakt. Daarnaast is er de Netwrix Auditor software die je automatisch helpt zoeken hiernaar.

Open PowerShell ISE en voer het onderstaande script in. Pas daarbij enkel $Path aan naar je gewenste shared folder om deze na te lopen.

$Path = '\\PDC\Shared\Accounting' #define path to folders to find duplicate files
$Files=gci -File -Recurse -path $Path | Select-Object -property FullName,Length
$Count=1
$TotalFiles=$Files.Count
$MatchedSourceFiles=@()
ForEach ($SourceFile in $Files)
{
Write-Progress -Activity "Processing Files" -status "Processing File $Count / $TotalFiles" -PercentComplete ($Count / $TotalFiles * 100)
$MatchingFiles=@()
$MatchingFiles=$Files |Where-Object {$_.Length -eq $SourceFile.Length}
Foreach ($TargetFile in $MatchingFiles)
{
if (($SourceFile.FullName -ne $TargetFile.FullName) -and !(($MatchedSourceFiles |
Select-Object -ExpandProperty File) -contains $TargetFile.FullName))
{
Write-Verbose "Matching $($SourceFile.FullName) and $($TargetFile.FullName)"
Write-Verbose "File sizes match."
if ((fc.exe /A $SourceFile.FullName $TargetFile.FullName) -contains "FC: no differences encountered")
{
Write-Verbose "Match found."
$MatchingFiles+=$TargetFile.FullName
}
}
}
if ($MatchingFiles.Count -gt 0)
{
$NewObject=[pscustomobject][ordered]@{
File=$SourceFile.FullName
MatchingFiles=$MatchingFiles
}
$MatchedSourceFiles+=$NewObject
}
$Count+=1
}
$MatchedSourceFiles

Na enige tijd toont het script de resultaten. De decplication daarna is overigens handmatig 😉